>我正在尝试添加一个键值对,键是一个字符串,值是一个类。整个事情是通过通用方法访问的。因此,当我根据键进行搜索时,我会在字典中获取类值。但不幸的是,我编写的代码编译它给出了以下错误。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>();
让我们看看我是否理解这个问题。
- 您有一个K/V对,它实际上是一个
string
/Type
。 - 给定一个
key
,你会得到一个Type
。 - 给定
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
。