传递一个泛型方法中使用的类型列表

本文关键字:列表 类型 泛型方法 一个 | 更新日期: 2023-09-27 18:03:02

给定类型列表:

public class TypeLists
{
    public static List<Type> types 
    {
        get
        {
            return new List<Type>() { typeof(ValueBool), typeof(ValueInt), typeof(ValueDouble), typeof(ValueString) };
        }
    }
}

我想传递这个或其他列表,以便在一个方法中通用地使用它们,该方法将以以下方式强制转换伴随的对象参数:

public static SettingValueUnit UsingAType<T>(object value)
{
    var a = (T)value;
}

我尝试实现它的使用:

foreach (Type t in TypeLists.types)
{
    SettingValueUnit ValueUnit = UsingAType<t>(D.SettingValue.value);
}

但是我得到以下错误

错误1 't'无法访问,因为它的保护级别

我被限制在。net 3.5紧凑框架。

传递一个泛型方法中使用的类型列表

我对你得到的错误方法的性质感到惊讶,而不是对你首先得到错误的事实感到惊讶。

不能将泛型参数指定为表达式——其目的是使其成为类型的编译时规范。如果你真的想这样做,你需要使用reflection:

// The ... is because we don't know the name of the type containing the method
Method method = typeof(...).GetMethod("UsingAType").MakeGenericMethod(t);
method.Invoke(...);