C# 使用反射时传递类型而不是值
我试图使用反射来手动构建ts文件,但似乎无法找到正确的方法。我有一个属性,它是枚举类名(类型)的列表。对于其中的每一个,我将调用一个方法,并创建一个ts文件。创建文件的方法(开始):C# 使用反射时传递类型而不是值,c#,reflection,C#,Reflection,我试图使用反射来手动构建ts文件,但似乎无法找到正确的方法。我有一个属性,它是枚举类名(类型)的列表。对于其中的每一个,我将调用一个方法,并创建一个ts文件。创建文件的方法(开始): publicstaticboolcreatejsonfiles(对象项,字符串filePath=null) { 尝试 { var type=item.GetType(); var values=Enum.GetValues(type).Cast(); if(filePath==null) { 返回false; }
publicstaticboolcreatejsonfiles(对象项,字符串filePath=null)
{
尝试
{
var type=item.GetType();
var values=Enum.GetValues(type).Cast();
if(filePath==null)
{
返回false;
}
在此之前,我使用了T泛型参数,通过调用以下函数
EnumsBuilder.CreateJsonFiles<LocatieType>($"{Server.MapPath("/")}");
EnumsBuilder.CreateJsonFiles($“{Server.MapPath(“/”));
问题是我希望现在(在迭代中)调用多值方法。我尝试了两件都不起作用的事情:
var type=item.GetType();
var values=Enum.GetValues(type).Cast();
这会在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);
}
}
publicstaticlist EnumList{get;set;}
公共静态void buildenum(字符串服务器路径)
{
foreach(枚举列表中的变量项)
{
var type=item.GetType();
CreateJsonFiles(类型、服务器路径);
}
}
这也会产生错误,因为这也是不允许的有人能给我解释一下正确的方法吗?我怀疑您为什么需要使用
强制转换
。强制转换不会更改数据的实际类型(除非您使用转换运算符,我在这里对此表示怀疑)。它只会更改变量的类型
我想你可以用这个:
var values = Enum.GetValues(type);
对于你的
CreateJsonFiles
方法,因为你实际上不需要泛型类型参数,你可以将它改为非泛型。@Jon我怀疑你根本不需要在这里强制转换,因此你不需要反射来调用泛型方法…@patrickhoffman:这是一个有点XY问题,是的。我在这个问题上是重复的这是一个实际被问到的问题,而不是解决OP是否真的应该走这条路线……这似乎把问题推到了代码的后面。在某个时候,我想枚举集合,而.Cast创建了一个枚举,允许这样做。如果我不使用Cast,我会收到一个数组,我似乎只需要able通过OfType()进行回溯,OfType()是另一种泛型方法,但您从未使用过泛型类型参数t
,那么为什么要将其设置为泛型呢?@Kai如果转换的要点是,出于某种原因,您需要IEnumerable接口,只需使用cast()即可
…反正你也不用t
。@Patrick:cast需要泛型参数(或者OfType需要泛型参数)这对1项很有效,但现在我有了一个列表,我无法找到正确的数据作为T传递,但您没有给出任何理由说明为什么需要类型或转换,以及为什么不能用非泛型类型变量替换它。
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);
}
}
var values = Enum.GetValues(type);