簡體   English   中英

從方法參數設置通用類型參數

[英]Setting a generic type parameter from a method parameter

有什么辦法可以做這樣的事情嗎?

void SomeMethod(Type generic)
{
    SomeGenericMethod<generic>();
}

我需要將類型作為“常規”參數而不是通用類型參數傳遞。

您可以通過反射來做到這一點:

public class foo
{
    public void SomeMethod(Type type)
    {
        var methodInfo = this.GetType().GetMethod("SomeGenericMethod");
        var method = methodInfo.MakeGenericMethod(new[] { type });
        method.Invoke(this, null);
    }

    public void SomeGenericMethod<T>()
    {
        Debug.WriteLine(typeof(T).FullName);
    }
}

class Program
{
    static void Main(string[] args)
    {
        var foo = new foo();
        foo.SomeMethod(typeof(string));
        foo.SomeMethod(typeof(foo));
    }
}

就是說,以這種方式使用反射意味着您一開始就失去了使用泛型的某些好處,因此您可能想看看其他設計替代方案。

假設您的方法是在名為MyClass的類中定義的,則應這樣做:

var MyObject = new MyClass();
typeof(MyClass).GetMethod("SomeGenericMethod").MakeGenericMethod(generic).Invoke(myObject, null);

Type.GetMethod()獲取一個對象,該對象描述了在其調用的Type中定義的方法。 該方法是通用的,因此我們需要調用MakeGenericMethod,並傳遞其一個通用參數。

然后,我們調用該方法,傳遞要調用該方法的對象以及它需要的所有參數。 由於不帶參數,因此我們只傳遞null。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM