2015-04-03 10 views
1

以下代碼在泛型T上產生錯誤,我不明白爲什麼。任何人都可以解釋我做錯了什麼,以及正確的做法是什麼?使用IEnumerable <T>作爲方法的輸入

代碼:

public static class CSVWriter 
{ 
    public static void WriteData(string fileName, string path, IEnumerable<T> data) 
    { 
     string filePath = path + fileName + ".csv"; 
     if (!File.Exists(filePath)) 
     { 
      File.Create(filePath).Close(); 
     } 
     StringBuilder sb = new StringBuilder(); 
     foreach (var item in data) 
     { 
      sb.AppendLine(data.ToString()); 
     } 

     File.AppendAllText(filePath, sb.ToString()); 
    } 
} 

錯誤:

Error CS0246 
The type or namespace name 'T' could not be found 
(are you missing a using directive or an assembly reference?) 

回答

6

這應該這樣做

public static class CSVWriter 
{ 
    public static void WriteData<T>(string fileName, string path, IEnumerable<T> data) 
    { 
     string filePath = path + fileName + ".csv"; 
     if (!File.Exists(filePath)) 
     { 
      File.Create(filePath).Close(); 
     } 
     StringBuilder sb = new StringBuilder(); 
     foreach (var item in data) 
     { 
      sb.AppendLine(data.ToString()); 
     } 

     File.AppendAllText(filePath, sb.ToString()); 
    } 
} 

T是一個類型參數。你的方法或你的班級應該聲明它。如果您選擇將T作爲方法的類型參數聲明,請將方法編寫爲WriteData<T>

注意,你也可以聲明T作爲你類的類型參數,但是在這種情況下,你的類不應該是static,因爲你需要實例化它。如果你想做到這一點,這就是你會怎麼做:

public class CSVWriter<T> { ... } 

欲瞭解更多信息,請參見:https://msdn.microsoft.com/en-us/library/512aeb7t.aspx

相關問題