如何从静态泛型类调用包含泛型类型的静态方法

时间:2014-05-14 17:21:30

标签: reflection

我正在使用Reflection来使用来自第三方的Generics来计算我的项目类,但是,我不断收到错误“无法对ContainsGenericParameters为true的类型或方法执行后期绑定操作。”当我尝试从包含泛型调用的静态泛型类调用静态方法时。

第三方代码如下所示

public interface INestedGeneric<TResult>
{
    INestedGeneric<TResult> DoSomethingElse();
}

public static class GenericClass<TResult> where TResult : new()
{
    public static INestedGeneric<TResult> DoSomething()
    { return new NestedClass<TResult>(); }
}

public class NestedClass<TResult> : INestedGeneric<TResult>
{
    public INestedGeneric<TResult> DoSomethingElse()
    { return new NestedClass<TResult>(); }
}

我的代码如下:

public class Someone
{
    private int _integerProperty;
    private string _stringProperty;

    public int IntegerProperty
    {
        get { return _integerProperty; }
        set { _integerProperty = value; }
    }

    public string StringProperty
    {
        get { return _stringProperty; }
        set { _stringProperty = value; }
    }
}

    static void Main(string[] args)
    {

        Type classType = typeof(Someone);
        Type theclass = typeof(GenericClass<>); theclass.MakeGenericType(classType);
        Type theinterface = typeof(INestedGeneric<>); theinterface.MakeGenericType(classType);

        MethodInfo dosomething = theclass.GetMethod("DoSomething", BindingFlags.Public | BindingFlags.Static);
        dosomething.Invoke(null, null);
        dosomething = null;

    }

知道如何在这种情况下严格调用该方法吗?我已阅读并尝试其他帖子的帮助,但没有用。

非常感谢你......

我已经弄清楚了。解决方案是使用MakeGenericType方法提供的类型。

像这样:

        ...
        Type theclass = typeof(GenericClass<>).MakeGenericType(classType);
        Type theinterface = typeof(INestedGeneric<>).MakeGenericType(classType);

        MethodInfo dosomething = theclass.GetMethod("DoSomething", BindingFlags.Public | BindingFlags.Static);
        dosomething.Invoke(null, null);
        ...

0 个答案:

没有答案