为什么 Console.Writeline 直接在扩展方法中工作,但使用 return 却不行

Why does Console.Writeline directly work in an extension method but using return doesn't

我正在尝试扩展 C# List 以使用 Print 函数。使用 Console.WriteLine(a.Print()) 仅显示部分输出,但 a.Print2() 在 a.Print 中可以正常工作,我正在调用具有 return 类型的方法string 和 a.Print2 我正在调用一个函数 return 值为 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();


        }
    }
}

因为你的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);
 }