在 C# 中创建泛型字典

  • 本文关键字:泛型 字典 创建 c#
  • 更新时间 :
  • 英文 :


>我正在尝试添加一个键值对,键是一个字符串,值是一个类。整个事情是通过通用方法访问的。因此,当我根据键进行搜索时,我会在字典中获取类值。但不幸的是,我编写的代码编译它给出了以下错误。TokenizeCardViewModel' 是一种类型,在给定的上下文中无效

所以当我做这样的事情时:

bool value = CreditCardDetailPathCollection().Contains(subPathValue)

我应该得到真或假。以便我以后可以使用字典的值来创建类的实例。

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 小提琴,以便您可以看到它的实际效果

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}");
}

现在,这假设您希望动态创建其实例的类有一个default constructor

最新更新