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

时间:2017-04-18 07:27:26

标签: c# reflection

我正在尝试使用反射手动构建一个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("/")}");

问题是我希望现在调用多值的方法(在迭代中)。我尝试了两件都不起作用的东西:

  1. 更改通用方法以删除参数,并使用typeof(item):

    var type = item.GetType();
    var values = Enum.GetValues(type).Cast<type >();
    

    这会导致Cast函数出错。

  2. 尝试在迭代中获取列表中项目的类型并尝试传递它:

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

    这也会出错,因为这也是不允许的。

  3. 有人能解释我这样做的正确方法吗?

1 个答案:

答案 0 :(得分:2)

我怀疑为什么你需要Cast。演员表不会改变数据的实际类型(除非您使用转换运算符,我在此怀疑)。它只会改变变量的类型。

我想你可以使用这个:

var values = Enum.GetValues(type);

对于CreateJsonFiles方法,由于您实际上不需要泛型类型参数,因此可以将其设置为非泛型。