gpt4 book ai didi

c# - 通过方法创建具有通用 csv 阅读器的类

转载 作者:太空宇宙 更新时间:2023-11-03 15:05:18 25 4
gpt4 key购买 nike

提醒一下,我是 stackoverflow 的新手,所以如果我不擅长寻找解决方案,请告诉我。

我有一个类库,它能够根据类的公共(public)成员读取 csv 文件,然后分配它们。但是,我不知道如何避免长时间切换,或者在我想调用/调用该方法时是否有其他方法。

这是我目前的使用方式:

public class DataSetup
{
List<object> ObjList = new List<object>();

public DataSetup(string file)
{
switch (file)
{
case "Persons.csv":
AssignCsvData<Person>(file);
break;
case "Address.csv":
AssignCsvData<Address>(file);
break;
}
}

public void AssignCsvData<T>(string file) where T : CsvableBase, new()
{
var cr = new CsvReader<T>();
var csvObjs = cr.Read(file);
foreach (var obj in csvObjs)
{
ObjList.Add(obj);
}
}

}

切换还没有“完成”,因为我希望有更好的方法。那么有没有办法在没有开关的情况下调用 AssignCsvData?

到目前为止,我已经尝试将类型作为构造函数的参数,但当它是变量时我不能将其用作类型。

最佳答案

如果文件名总是代表一个类。在您的情况下,Persons.csv 和 Person 之间存在不匹配,但假设它们确实匹配,则以下内容可以使用反射而不是 switch 语句来工作:

var type = Type.GetType(Path.GetFileNameWithoutExtension(file));

var method = typeof(Processor)
.GetMethod("AssignCsvData")
.MakeGenericMethod(type);

method.Invoke(new Processor(), file);

注意:如果您想在 LinqPad 中对此进行测试,请不要忘记使用“UserQuery+”命名空间来获取类型。即:

var type = Type.GetType($"UserQuery+{Path.GetFileNameWithoutExtension(file)}");

关于c# - 通过方法创建具有通用 csv 阅读器的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43831735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com