我在.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>()
{
}
}
答案 0 :(得分:6)
绑定标志很难解决这个问题。使用BindingFlags.NonPublic | BindingFlags.Instance
。
var mi = GetType().GetMethod("SaveEntityGeneric",
BindingFlags.NonPublic | BindingFlags.Instance);
var gm = mi.MakeGenericMethod(GetType());
gm.Invoke(this, null);
答案 1 :(得分:0)
只需将其设为内部即可防止在程序集外使用该方法