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