簡體   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