4

私は a を使用してDictionary<string, string>おり、null 値を持つ項目を追加しています (私の実際の状況では変数です)。

var testDictionary = new Dictionary<string, string>();
testDictionary.Add("Test", null);

これにより、「'NotNull' 属性でマークされたエンティティに 'null' が割り当てられる可能性があります」という警告が表示されます。 可能な「ヌル」割り当て

ReSharper にコレクション初期化子に変換させると、警告は表示されません。

var testDictionary = new Dictionary<string, string> {{"Test", null}};

では、ディクショナリの値が「NotNull」属性でマークされているというのは本当ですか? それとも何か他のことが起こっていますか?

編集:この質問はResharperとそれほど違いはありません:notnull属性でマークされたエンティティへのnull割り当ての可能性がありますが、私の質問に対する答えは異なります(R#のバグであり、コレクションにnull要素を追加することは良くありません)考え)。

4

3 に答える 3

7

null一般に、要素をコレクションに入れることは悪い習慣です。コレクションを消費するコードの圧倒的多数は、コレクション内の値がそうではないことを前提としていますnull。が有効なコレクション要素である場合null、それは実際にすべての消費コードを複雑にします。

たとえば、あなたは本質的に書く必要があります

foreach (var cur in theCollection) {
  if (cur.Value == null) {
    continue;
  }
  ...
}

この特定のケースでは、R#にコレクション初期化子のケースがないように見えます。nullコレクションに含まれることは 間違いなく予想外です。

nullなぜ使用しないのではなくString.Empty

于 2012-04-13T14:54:29.960 に答える
2

これはバグで、6.0 で修正されました

そうです、何か他のこと起こっています-R#をアップグレードする必要があります;)

于 2012-04-13T15:03:42.423 に答える
0

ReSharper に障害があります。メニューを使用して「Possible Null...」のオプションを検査し、警告を無効にする場合は「表示しない」に変更できます。

コードは完全に問題ありませんが、なぜ null を追加したいのか想像できません (通常、それを行うためのよりクリーンな方法がある悪い設計/アルゴリズムを指しています)。

于 2012-04-13T14:57:20.867 に答える