C# 使用反射时传递类型而不是值

C# 使用反射时传递类型而不是值,c#,reflection,C#,Reflection,我试图使用反射来手动构建ts文件,但似乎无法找到正确的方法。我有一个属性,它是枚举类名(类型)的列表。对于其中的每一个,我将调用一个方法,并创建一个ts文件。创建文件的方法(开始): publicstaticboolcreatejsonfiles(对象项,字符串filePath=null) { 尝试 { var type=item.GetType(); var values=Enum.GetValues(type).Cast(); if(filePath==null) { 返回false; }

我试图使用反射来手动构建ts文件,但似乎无法找到正确的方法。我有一个属性,它是枚举类名(类型)的列表。对于其中的每一个,我将调用一个方法,并创建一个ts文件。创建文件的方法(开始):

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(“/”));
问题是我希望现在(在迭代中)调用多值方法。我尝试了两件都不起作用的事情:

  • 更改常规方法以删除参数,并使用typeof(项):

    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);