我正在尝试使用反射手动构建一个ts文件,但似乎无法弄清楚如何以正确的方式执行它。我有一个属性,它将是枚举类名(类型)的列表。对于其中的每一个,我将调用一个创建ts文件的方法。创建文件的方法(开始):
public static bool CreateJsonFiles<T>(object item, string filePath = null)
{
try
{
var type = item.GetType();
var values = Enum.GetValues(type).Cast<T>();
if (filePath == null)
{
return false;
}
事先我通过调用类似
的函数来使用T generic参数EnumsBuilder.CreateJsonFiles<LocatieType>($"{Server.MapPath("/")}");
问题是我希望现在调用多值的方法(在迭代中)。我尝试了两件都不起作用的东西:
更改通用方法以删除参数,并使用typeof(item):
var type = item.GetType();
var values = Enum.GetValues(type).Cast<type >();
这会导致Cast函数出错。
尝试在迭代中获取列表中项目的类型并尝试传递它:
public static List<Type> EnumList { get; set; }
public static void BuildEnums(string serverPath)
{
foreach (var item in EnumList)
{
var type = item.GetType();
CreateJsonFiles<type>(type, serverPath);
}
}
这也会出错,因为这也是不允许的。
有人能解释我这样做的正确方法吗?
答案 0 :(得分:2)
我怀疑为什么你需要Cast
。演员表不会改变数据的实际类型(除非您使用转换运算符,我在此怀疑)。它只会改变变量的类型。
我想你可以使用这个:
var values = Enum.GetValues(type);
对于CreateJsonFiles
方法,由于您实际上不需要泛型类型参数,因此可以将其设置为非泛型。