簡體   English   中英

在 C# 中創建通用字典

[英]Creating Generic Dictionary in C#

我正在嘗試添加一個鍵值對,鍵是字符串,值是 class。 整個事情是通過通用方法進行訪問。 因此,當我根據 Key 進行搜索時,我會在字典中得到 class 值。 但不幸的是,我編寫的代碼編譯它給出了以下錯誤。 TokenizeCardViewModel' 是一種類型,在給定的上下文中無效

所以當我做這樣的事情時:

bool value = CreditCardDetailPathCollection().Contains(subPathValue)

我應該得到真或假。 這樣我以后可以使用字典的值來創建 class 的實例。

private Dictionary<string,T> CreditCardDetailPathCollection<T>() where T:class
{
   return new Dictionary<string,T>
   { 
      { "tokenize-card", TokenizeCardViewModel } 
   };
}

試試這個代碼

private Dictionary<string, T> CreditCardDetailPathCollection<T>() where T : class
    {
        var obj = Activator.CreateInstance<T>(); 
        return new Dictionary<string, T>
        { 
            { "tokenize-card", obj } 
        };
    }

下面的代碼將創建 T 的實例

var obj = Activator.CreateInstance<T>();

這樣你只需要像這樣調用 CreditCardDetailPathCollection 方法

var dict = CreditCardDetailPathCollection<TokenizeCardViewModel>();

讓我們看看我是否理解這個問題。

  1. 你有一個 K/V 對,它實際上是一個string / Type
  2. 給定一個key ,您將返回一個Type
  3. 給定type ,您現在創建此類型的實例。

這是一些可能有幫助的代碼...

注意:我還制作了這個小 .NET Fiddle ,這樣你就可以看到它的實際效果

var myTypes = new Dictionary<string, Type>(StringComparer.OrdinalIgnoreCase);
myTypes.Add("Leia", typeof(User));

...

if (!myTypes.ContainsKey(key))
{
    Console.WriteLine($"Dictionary failed to contain the key: {key}");
    return;
}

var myType = myTypes[key];
Console.WriteLine($"Found the type: ${myType.ToString()}.");

try
{
    var something = Activator.CreateInstance(myType);
}
catch (Exception exception)
{
    Console.WriteLine($"Failed to create an instance of {myType.ToString()}. Why? Error Message: {exception.Message}");
}

現在假設您希望動態創建其實例的 class 有一個default constructor

暫無
暫無

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

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