使用 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
以下代码在泛型 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