有没有办法让C#中Dictionary<string,string>
的所有密钥获得智能感知?
或者是否可以使用字符串参数获取intellisense。
我想要ResourceManager.GetString("")
之类的东西。如果可能的话,我不想创建一个带有常量字符串的静态类来模拟它。
编辑:
我目前正在使用字典将多个资源文件合并到一个字典中,这样做是因为资源用于多个项目并且需要覆盖。
var temp = ResourceFile1.ResourceManager
.GetResourceSet(CultureInfo.CurrentUICulture, true, true)
.Cast<object>()
.Select(
x => new
{
ID = 1,
Value = x.GetType().GetProperty("Value").GetValue(x, null).ToString(),
Key = x.GetType().GetProperty("Key").GetValue(x, null).ToString()
});
temp = temp.Concat(
ResourceFile2.ResourceManager
.GetResourceSet(CultureInfo.CurrentUICulture, true, true)
.Cast<object>()
.Select(
x => new
{
ID = 2,
Value = x.GetType().GetProperty("Value").GetValue(x, null).ToString(),
Key = x.GetType().GetProperty("Key").GetValue(x, null).ToString()
}));
temp = temp.Concat(
ResourceFile3.ResourceManager
.GetResourceSet(CultureInfo.CurrentUICulture, true, true)
.Cast<object>()
.Select(
x => new
{
ID = 3,
Value = x.GetType().GetProperty("Value").GetValue(x, null).ToString(),
Key = x.GetType().GetProperty("Key").GetValue(x, null).ToString()
}));
ResourceDictionary = temp.GroupBy(x => x.Key)
.Select(x => x.FirstOrDefault(c => c.ID == x.Max(v => v.ID)))
.ToDictionary(x => x.Key, x => x.Value);
答案 0 :(得分:5)
如果您知道有限值,请不要使用字符串,但在这种情况下使用枚举。
根据定义,string可以在运行时包含任何值,而枚举在编译时是已知的。
或者你可以简单地避免使用字典。如果您知道您的词典将始终包含相同的键,则最好使用之前使用的每个键创建一个具有一个属性的类。
答案 1 :(得分:1)
不,没有办法让Intellisense在编译时不知道的东西,比如词典中的键。 Intellisense仅适用于编译时对象。
答案 2 :(得分:0)
您不能使用Dictionary,因为它使用哈希函数。由于类似的字符串没有类似的哈希值,这根本不适合您的目的。
如果您需要自己实现,我认为您可以通过构建基数树来解决它。
(我把它解释为好像你想在运行时使用intellisense。)