字典<string,string> intellisense </string,string>

时间:2012-10-11 08:35:55

标签: c# string visual-studio intellisense dictionary

有没有办法让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);

3 个答案:

答案 0 :(得分:5)

如果您知道有限值,请不要使用字符串,但在这种情况下使用枚举。

根据定义,string可以在运行时包含任何值,而枚举在编译时是已知的。

或者你可以简单地避免使用字典。如果您知道您的词典将始终包含相同的键,则最好使用之前使用的每个键创建一个具有一个属性的类。

答案 1 :(得分:1)

不,没有办法让Intellisense在编译时不知道的东西,比如词典中的键。 Intellisense仅适用于编译时对象。

答案 2 :(得分:0)

您不能使用Dictionary,因为它使用哈希函数。由于类似的字符串没有类似的哈希值,这根本不适合您的目的。

如果您需要自己实现,我认为您可以通过构建基数树来解决它。

(我把它解释为好像你想在运行时使用intellisense。)