在静态类中声明一个字典
如何在静态类中声明静态字典对象? 我试过了
public static class ErrorCode { public const IDictionary<string, string> ErrorCodeDic = new Dictionary<string, string>() { { "1", "User name or password problem" } }; }
但是编译器会抱怨:“ 除了string以外的引用types的const字段只能用null初始化 ”。
如果你想声明一次字典而不改变它,那么声明它是只读的:
private static readonly Dictionary<string, string> ErrorCodes = new Dictionary<string, string> { { "1", "Error One" }, { "2", "Error Two" } };
如果你想把项目字典只读(不只是引用,而且还包括集合中的项目),那么你将不得不创build一个实现IDictionary的只读字典类。
查阅ReadOnlyCollection以供参考。
BTW常量只能用于内联声明标量值。
正确的语法(在VS 2008 SP1中testing)是这样的:
public static class ErrorCode { public static IDictionary<string, string> ErrorCodeDic; static ErrorCode() { ErrorCodeDic = new Dictionary<string, string>() { {"1", "User name or password problem"} }; } }
老问题,但我发现这有用。 原来,还有一个字典使用键和值的string的专门类:
private static readonly StringDictionary SegmentSyntaxErrorCodes = new StringDictionary { { "1", "Unrecognized segment ID" }, { "2", "Unexpected segment" } };
编辑:下面的每个克里斯的评论,使用Dictionary<string, string>
over StringDictionary
通常是首选,但将取决于您的情况。 如果您正在处理较旧的代码库,则可能仅限于StringDictionary
。 另外,请注意以下行:
myDict["foo"]
如果myDict
是StringDictionary
,将返回null,但在Dictionary<string, string>
情况下将抛出exception。 看到他提到的SOpost了解更多信息,这是编辑的来源。
你最初的例子的问题主要是由于使用const
而不是static
。 你不能在C#中创build一个非null的const引用。
我相信这也会起作用:
public static class ErrorCode { public static IDictionary<string, string> ErrorCodeDic = new Dictionary<string, string>() { {"1", "User name or password problem"} }; }
此外,正如Y Low指出的那样,添加readonly
也是一个好主意,而且这里讨论的修饰符都不会阻止字典本身被修改。
创build一个静态构造函数来在Dictionary中添加值
enum Commands { StudentDetail } public static class Quires { public static Dictionary<Commands, String> quire = new Dictionary<Commands, String>(); static Quires() { quire.add(Commands.StudentDetail,@"SELECT * FROM student_b"); } }
使词典是一个静态的,永远不会添加到你的静态对象的外部。 这似乎是比C#中的静态/常量规则摆弄更简单的解决scheme。
好的 – 所以我在ASP 2.x(不是我的select…但嘿谁是婊子?)工作。
没有初始化字典的例子会工作。 然后我碰到这个: http : //kozmic.pl/archive/2008/03/13/framework-tips-viii-initializing-dictionaries-and-collections.aspx
这让我不能在ASP 2.x中使用集合初始化的事实。
您可以使用静态/类构造函数来初始化您的字典:
public static class ErrorCode { public const IDictionary<string, string> ErrorCodeDic; public static ErrorCode() { ErrorCodeDic = new Dictionary<string, string>() { {"1", "User name or password problem"} }; } }
public static class ErrorCode { public const IDictionary<string , string > m_ErrorCodeDic; public static ErrorCode() { m_ErrorCodeDic = new Dictionary<string, string>() { {"1","User name or password problem"} }; } }
可能在构造函数中初始化。