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

时间:2017-09-20 15:12:27

标签: c# console-application extension-methods

我正在尝试扩展C#List以使用Print功能。使用Console.WriteLine(a.Print())只显示部分输出,但a.Print2()正常工作在a.Print我调用一个返回类型字符串的方法,在a.Print2中我调用一个函数返回值无效。

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 个答案:

答案 0 :(得分:5)

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