首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在静态类中声明字典

在静态类中声明字典
EN

Stack Overflow用户
提问于 2008-11-24 03:08:00
回答 8查看 132.7K关注 0票数 99

如何在静态类中声明静态字典对象?我试过了

public static class ErrorCode
{
    public const IDictionary<string, string> ErrorCodeDic = new Dictionary<string, string>()
    {
        { "1", "User name or password problem" }     
    };
}

但是编译器抱怨“引用类型而不是string的常量字段只能用null初始化”。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-11-24 03:30:42

如果你想声明一次字典并且永远不改变它,那么将它声明为readonly:

private static readonly Dictionary<string, string> ErrorCodes
    = new Dictionary<string, string>
{
    { "1", "Error One" },
    { "2", "Error Two" }
};

如果您希望字典中的项是只读的(不仅是引用,还包括集合中的项),则必须创建一个实现IDictionary的只读字典类。

请查看ReadOnlyCollection以供参考。

顺便说一句,常量只能在内联声明标量值时使用。

票数 241
EN

Stack Overflow用户

发布于 2008-11-24 03:23:43

正确的语法(在VS 2008 SP1中经过测试)如下:

public static class ErrorCode
{
    public static IDictionary<string, string> ErrorCodeDic;
     static ErrorCode()
    {
        ErrorCodeDic = new Dictionary<string, string>()
            { {"1", "User name or password problem"} };
    }
}
票数 8
EN

Stack Overflow用户

发布于 2008-11-24 03:38:43

最初示例的问题主要是由于使用了const而不是static;您不能在C#中创建非空常量引用。

public static class ErrorCode
{
    public static IDictionary<string, string> ErrorCodeDic
        = new Dictionary<string, string>()
            { {"1", "User name or password problem"} };
}

此外,正如Y Low指出的那样,添加readonly也是一个好主意,并且这里讨论的修饰符都不会阻止字典本身被修改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/313324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档