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

时间:2015-04-03 04:10:51

标签: c# generics

以下代码在通用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?)

1 个答案:

答案 0 :(得分: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