繁体   English   中英

如何在运行时调用C#传递类型中的私有泛型方法

[英]How to call private generic method in C# passing type in runtime

我在.NET 3.5中尝试过以下代码,但mi为null。 如何调用私有泛型方法以便在运行时传递类型参数? 如果将SaveEntityGeneric标记为public,则此代码可以正常工作,但我不打算将其公开,因为它仅用于同一类中的其他方法,以使用GetType()传递此类类型。

using System.Reflection;

public class Main1
{
    static void Main()
    {
        new Class1().Test();
    }
}

class Class1
{

    public void Test()
    {
        var mi = GetType().GetMethod("SaveEntityGeneric", BindingFlags.NonPublic);
        // why mi is null ?
        var gm = mi.MakeGenericMethod(GetType());
        gm.Invoke(this, null);
    }

    void SaveEntityGeneric<TEntity>()
    {
    }
}

绑定标志很难搞清楚。 使用BindingFlags.NonPublic | BindingFlags.Instance BindingFlags.NonPublic | BindingFlags.Instance

var mi = GetType().GetMethod("SaveEntityGeneric", 
                             BindingFlags.NonPublic | BindingFlags.Instance);
var gm = mi.MakeGenericMethod(GetType());
gm.Invoke(this, null);

只需将其设置为内部 ,即可防止在程序集外部使用该方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM