代码之家  ›  专栏  ›  技术社区  ›  Ravi

为什么控制台。Writeline直接在扩展方法中工作,但使用return不起作用

  •  -4
  • Ravi  · 技术社区  · 7 年前

    我试图扩展C#List以使用打印函数。使用控制台。WriteLine(a.Print())仅显示部分输出,但a.Print2()工作正常,其中在a.Print中,我调用的是返回类型为string的方法,在a.Print2中,我调用的是返回值为void的函数。

    using System;
    using ExtensionMethods;
    using System.Collections.Generic;
    
    namespace ExtensionMethods
    {
        public static class ExtensionClass
        {
            public static int PlusFive(this int input)
            {
                return input + 5;
            }
    
            static public string Print(this List<int> input)
            {   
                int i;
                string output = "";
                for (i = 0; i <  input.Count - 1; i++)
                {
                    output = input[i].ToString() + ", ";
                }
                output += input[i].ToString();
    
    
                return output;
                // Outputs 2, 3
            }
    
            static public void Print2(this List<int> input)
            {
                int i;
                for (i = 0; i < input.Count - 1; i++)
                {
                    Console.Write(input[i].ToString() + ", ");
                }
    
                Console.Write(input[i].ToString());
                // Outputs 1, 2 ,3
    
            }
        }
    
    }
    namespace LearningCSharp
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<int> a = new List<int>(){1, 2, 3};
                // int b = 2;
                Console.WriteLine(a.Print());
                a.Print2();
    
    
            }
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  5
  •   René Vogt    7 年前

    因为你的 Print() output

     static public string Print(this List<int> input)
     {   
         int i;
         string output = "";
         for (i = 0; i <  input.Count - 1; i++)
         {
             // missing plus here
             output += input[i].ToString() + ", ";
         }
         return output;
      }
    

    但是请注意,连接字符串的可能性更好。这里的一个解决方案可能是:

     static public string Print(this List<int> input)
     {   
         return string.Join(", ", input);
     }