使用 IEnumerable<T> 作为方法的输入

Using IEnumerable<T> as an input to a method

以下代码在泛型 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?)

应该这样做

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 是类型参数。您的方法或您的 class 应该声明它。如果您选择将 T 声明为方法的类型参数,则将方法编写为 WriteData<T>.

请注意,您也可以将 T 声明为 class 的类型参数,但是,在这种情况下,您的 class 不应该是 static ,因为您需要实例化它。如果你想这样做,你会这样做:

public class CSVWriter<T> { ... }

更多信息请参考:https://msdn.microsoft.com/en-us/library/512aeb7t.aspx