SO上有类似的问题,但没有一个回答我的问题。
我想有一个二维字典来翻译。像这样的东西:
Dictionary["DE"][TranslationKeys.Title] = "Title in German";
Dictionary["DE"][TranslationKeys.SubTitle] = "Subtitle in German";
Dictionary["PL"][TranslationKeys.Title] = "Title in Polish";
Dictionary["PL"][TranslationKeys.SubTitle] = "Subtitle in Polish";
Dictionary["EN"][TranslationKeys.Title] = "Title in English";
Dictionary["EN"][TranslationKeys.SubTitle] = "Subtitle in English";
如果我使用像这样的传统字典,那没关系Dictionary<string,Dictionary<TranslationKeys,string>>
但我不想像这样以“丑陋”的方式初始化它:
Dictionary = new Dictionary<string,Dictionary<TranslationKeys,string>>(){
{"PL",new Dictionary<TranslationKeys,string>(){{TranslationKeys.SubTitle,"Subtitle in Polish"}}}
};
但像这样:
Dictionary["PL"][TranslationKeys.SubTitle] = "Subtitle in Polish";
所以我试图实现一个“智能”多维字典,如果他得到了价值,它会自行判断。到目前为止,我所做的是一个使用 Dictionary 和特殊索引器的新泛型类:
public class TranslateDictionary<TKey, TValue> where TValue : new()
{
private Dictionary<TKey, TValue> Dictionary;
public TValue this[TKey lang]
{
get
{
if (!Dictionary.ContainsKey(lang))
{
TValue obj = new TValue();
Dictionary.Add(lang, new TValue());
}
return Dictionary[lang];
}
set
{
Dictionary[lang] = value;
}
}
}
但现在我被卡住了......因为我在我的通用类型 TranslateDictionary 中使用字符串,所以我遇到了这个错误:
错误 2“字符串”必须是具有公共无参数构造函数的非抽象类型,才能将其用作泛型类型或方法“Resources.TranslateDictionary”中的参数“TValue”
尽管编译器不会抱怨这样的初始化:
Dictionary["EN"][TranslationKeys.Title] = "Title in English";
也许我应该使用其他类型的集合而不是我不知道的 Dictionary 来解决我的问题?