C# 用C语言创建通用词典#
我试图添加一个键值对,键值是字符串,值是类。整个过程就是通过一个通用方法进行访问。因此,当我基于键进行搜索时,我会在字典中得到类值。但不幸的是,我编写的代码编译后给出了以下错误。TokenizeCardViewModel“”是一种类型,在给定上下文中无效 所以当我这样做的时候:C# 用C语言创建通用词典#,c#,C#,我试图添加一个键值对,键值是字符串,值是类。整个过程就是通过一个通用方法进行访问。因此,当我基于键进行搜索时,我会在字典中得到类值。但不幸的是,我编写的代码编译后给出了以下错误。TokenizeCardViewModel“”是一种类型,在给定上下文中无效 所以当我这样做的时候: bool value=CreditCardDetailPathCollection()。包含(子路径值) 我应该知道是真是假。这样我以后可以使用dictional的值来创建类的实例 private Dictionary&
bool value=CreditCardDetailPathCollection()。包含(子路径值)
我应该知道是真是假。这样我以后可以使用dictional的值来创建类的实例
private Dictionary<string,T> CreditCardDetailPathCollection<T>() where T:class
{
return new Dictionary<string,T>
{
{ "tokenize-card", TokenizeCardViewModel }
};
}
private Dictionary CreditCardDetailPathCollection(),其中T:class
{
返回新词典
{
{“tokenize卡”,TokenizeCardViewModel}
};
}
试试这段代码
private Dictionary<string, T> CreditCardDetailPathCollection<T>() where T : class
{
var obj = Activator.CreateInstance<T>();
return new Dictionary<string, T>
{
{ "tokenize-card", obj }
};
}
private Dictionary CreditCardDetailPathCollection(),其中T:class
{
var obj=Activator.CreateInstance();
返回新词典
{
{“令牌化卡”,obj}
};
}
下面的代码将创建T的实例
var obj = Activator.CreateInstance<T>();
var obj=Activator.CreateInstance();
这样,您只需要像这样调用CreditCardDetailPathCollection方法
var dict = CreditCardDetailPathCollection<TokenizeCardViewModel>();
var dict=CreditCardDetailPathCollection();
好的,让我们看看我是否理解这个问题
字符串
/类型
键
,将返回一个类型
类型
,现在可以创建此类型的实例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}");
}
var myTypes=新字典(StringComparer.OrdinalIgnoreCase);
添加(“Leia”,typeof(User));
...
如果(!myTypes.ContainsKey(键))
{
WriteLine($“字典无法包含键:{key}”);
返回;
}
var myType=myTypes[key];
WriteLine($“找到类型:${myType.ToString()}”);
尝试
{
var something=Activator.CreateInstance(myType);
}
捕获(异常)
{
Console.WriteLine($”未能创建{myType.ToString()}的实例。为什么?错误消息:{exception.Message}”);
}
现在,假设您希望动态创建实例的类有一个
默认构造函数
。不完全清楚您要做什么。您可能需要创建一个新实例新的TokenizeCardViewModel()
但除非TokenizeCardViewModel
是从T派生的,否则您仍然会遇到问题。已尝试但出现错误。无法从TokenizeCardViewModel转换为我上一条评论中提到的。你能解释一下你想要达到什么目的,以便能提供适当的帮助吗?我知道你正在尝试创建通用词典。我不明白的是{“tokenize card”,TokenizeCardViewModel}
如何在您想要做的事情中发挥作用。使用new()
约束也应该起作用。允许使用new T()
而不是使用activator。@Nkosi尝试了以下错误:无法创建变量类型“T”的实例,因为它没有新的(0)约束。是否包含约束其中T:class,new()
虽然这样做了……但……我不确定OP是否会在这里尝试实现这一点。让CreditCardDetailPathCollection()
返回一个字典,其中该类型的对象位于键标记卡
。