簡體   English   中英

將類型轉換為通用類定義

[英]Convert Type to Generic Class Definition

我想將System.Type轉換為Generic Type定義,因此我可以使用它來調用Generic方法。 基本上與typeof相反。

示例(我使用“classof”,我需要真正的解決方案,以便您看到我遇到問題的地方,因為classof不是真正的.NET方法):

public class BaseAppContext {

    private Type settingsType;

    public Type SettingsType
    {
        get { return this.settingsType; }
        set { this.SettingsType = value; }
    }    

    public void MyFunction() {
      MyStaticClass.GetData<classof(this.SettingsType)>();
    }
}

更多信息為什么我使用這種奇怪的方式來處理問題。 BaseAppContext是一個由許多其他類引用的類。 如果我願意使它成為通用,這將意味着代碼的許多其他部分將改變,這是我不想要的。 我正在編寫一個框架,所以我希望框架能夠輸入一次類型,開發人員只需使用提供的函數,而無需在每次嘗試調用方法時處理類型。

這是不可能的,因為在運行時SettingsType ,並且編譯了<>之間的代碼。

您可以像這樣創建類型的實例:

var type = Type.GetType(SettingsType);
var inst = Activator.CreateInstance(type);

並將inst轉換為接口或基類。

由於你使用的是靜態類,所以富人的答案會更好。

這基本上是不可能的。
泛型形成編譯時類型; 您無法從僅在運行時知道的類型創建編譯時類型。

相反,您需要使用反射,或使用不同的設計(例如,非通用方法)。

要實現這一點,您需要使用反射:

public void MyFunction() {
  var method = typeof(MyStaticClass).GetMethod("GetData").MakeGenericMethod(SettingsType);
  method.Invoke(null, null);
}

但是,我不建議這樣做,而是建議重新設計您的解決方案。 使用反射意味着您錯過了語言提供的所有可愛的編譯時安全性。 這通常會導致代碼更脆弱,維護更少。

暫無
暫無

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

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