1

我想写一种方法来完成一项任务,而不是很多。我将传递其类型可能是几个自定义类之一的列表。那可能吗?一个用“??”解释我所追求的样本 标记我不知道语法如何工作的地方。谢谢你。

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();
}
4

3 回答 3

3

我相信您正在寻找使该方法通用的方法。在这种情况下,您只需要调整方法签名以使其接受类型参数T

static void MoveSuccessRecords<T>(List<T> thisList, string ..)

然后,您可以选择明确类型参数或让编译器从给定参数中推断出泛型类型参数

var someList = new List<string>();
MoveSuccessRecords<string>(someList);
于 2013-08-14T23:11:25.800 回答
2

您应该将此方法设为泛型方法,就像 List 是泛型类一样。为 List 提供参数时,您可以重用泛型参数:

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();
}
于 2013-08-14T23:10:37.510 回答
0

好的,在不了解所有细节或过多思考的情况下,这就是我要做的:

1) 使用 List 定义 thisList 2) 使用 item.GetType() 确定列表中项目的类型(您指出,虽然对象可能相似,但它们可能不一样)。一个接口会使这更容易——但我没有看到对该评论的回应。然后您可以将适当的项目传递给 WriteRecord 方法。

希望你能得到你正在寻找的答案。

于 2013-08-14T23:16:27.697 回答