0

我有一个具有静态属性的类。我希望这个类有一个静态的、只读的字典——我想匿名初始化它。我尝试了以下方法,但它不起作用:

    public static readonly Guid ID1 = new Guid("53ba029b-0850-4f51-a358-648411e30972");
    public static readonly Guid ID2 = new Guid("400a9861-21c3-45fd-bf75-95be8f535c58");

public static readonly Dictionary<Guid, String> IdsAndStrings = new Dictionary<Guid, string>(){
    {ID1, "string"},
    {ID2, "string 2"}
};

尝试初始化它时出现异常。内部异常甚至提到了对日期时间的错误转换!?不知道那里发生了什么。像这样实例化一个新的 Dictionary<> 是不可能的吗?我应该改用 Get Set 吗?

编辑:请假设所有 guid 和字符串都是有效的。

4

2 回答 2

2

不,这并非不可能。使用集合初始化器,它看起来像这样:

Dictionary<Guid, string> idsAndStrings = new Dictionary<Guid, string>
{
    { Guid.NewGuid(), "" },
    { Guid.NewGuid(), "" },
};

Get/set 会将项目公开为可写属性,这在语义上与只读字段不同 - 在某些情况下会提供不同的行为。

于 2012-09-21T14:37:03.440 回答
1

您现有的语法看起来是正确的,所以唯一可能有错误的部分是Guidor 字符串常量。

如果您尝试将 Guid 作为字符串传递,请显式使用适当的Guid 构造函数:

{ new Guid("XXX-XXX"), "string" },
{ new Guid("YYY-YYY"), "string" },
于 2012-09-21T14:39:56.357 回答