我想写一种方法来完成一项任务,而不是很多。我将传递列表,其类型可以是几个自定义类之一。那可能吗?一个样本用“??”来解释我的意思标记我不知道语法如何工作的地方。谢谢。
private static void MoveSuccessRecords(List<??> thisList, string VUEFileName, string folderArchive, string folderError)
{
StreamWriter successWriter = new StreamWriter(folderArchive + VUEFileName.Replace(extension, "_COMPLETE" + extension), true);
CsvWriter successCSV = new CsvWriter(successWriter);
successCSV.WriteHeader<??>();
foreach (var item in thisList)
{
successCSV.WriteRecord(item);
}
successCSV.Dispose();
successWriter.Dispose();
successWriter.Close();
}
答案 0 :(得分:3)
我相信您正在寻求使该方法具有通用性。在这种情况下,您只需要调整方法签名,以便它接受类型参数T
static void MoveSuccessRecords<T>(List<T> thisList, string ..)
然后,您可以选择明确类型参数或让编译器从给定参数中推断出泛型类型参数
var someList = new List<string>();
MoveSuccessRecords<string>(someList);
答案 1 :(得分:2)
您应该使此方法成为通用方法,就像List是泛型类一样。在为List:
提供参数时,您可以重用generic参数private static void MoveSuccessRecords<T>(List<T> thisList, string VUEFileName, string folderArchive, string folderError)
{
StreamWriter successWriter = new StreamWriter(folderArchive + VUEFileName.Replace(extension, "_COMPLETE" + extension), true);
CsvWriter successCSV = new CsvWriter(successWriter);
successCSV.WriteHeader<T>();
foreach (var item in thisList)
{
successCSV.WriteRecord(item);
}
successCSV.Dispose();
successWriter.Dispose();
successWriter.Close();
}
答案 2 :(得分:0)
好的,在不知道所有细节或过多思考的情况下,我会这样做:
1)使用List定义thisList 2)使用item.GetType()来确定列表中项目的类型(您指出虽然对象可能相似,但它们可能不相同)。接口会使这更容易 - 但我没有看到对该评论的回应。然后,您可以将相应的项传递给WriteRecord方法。
希望你得到你想要的答案。