2017-09-20 56 views
-4

我試圖延長C#列表使用打印功能。使用Console.WriteLine(a.Print())只顯示部分輸出,但a.Print2()正常工作,其中在a.Print我打電話返回類型爲字符串,並以a.Print2我打電話用的功能的方法返回值void。爲什麼Console.Writeline直接擴展方法工作,但使用的回報不

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(); 


     } 
    } 
} 
+0

我甚至不知道static public void是合法的語法,直到我讀到這個。 –

+1

當你調試也並非表現出你和你的打印方法確切的問題(在循環覆蓋輸出)?我的意思是,我在此之前假設你看過你的方法中輸出變量是如何構造的?我的意思是,如果不先進行基本的調試,你不會問這個問題嗎? – Chris

+0

@Chris你爲什麼不呢? – Servy

回答

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; 
    } 

注意,有更好的possibilites到Concat的字符串:你缺少的加分。一個解決方案可能是這樣的:

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

雷內是對的。我建議也花一些時間在調試器中。設置一些斷點和檢查在調試器輸出的值可能會導致你的回答非常迅速,而無需問在計算器上。本次論壇是一個很好的資源 - 特別是對於困難的問題 - 但不能代替良好的老式調試,測試和文檔的閱讀 –

相關問題