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

既存の構文は正しいように見えるため、エラーが発生する可能性のある唯一の部分はGuidまたは 文字列定数です。

Guid を文字列として渡そうとする場合は、適切なGuid コンストラクターを明示的に使用します。

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