4

Resharper は、次のコードについて、「式が常に false である」ため、最後の null チェックが冗長であると不満を述べています。

  ICloneable data = item as ICloneable;
  if (data == null)
    throw new InvalidCastException("blah blah, some error message");

  object copy = data.Clone();
  if (copy == null) //  <-- this is where it complains.
    return default(T);

null にならないことをどのようにして知るのでしょうか?

4

2 に答える 2

3

ICloneableReSharper は、オブジェクトが の契約に準拠していることを前提としています。

結果のクローンは、元のインスタンスと同じタイプであるか、互換性がある必要があります。

null ではないことがチェックされているという事実とdata、ReSharper の実装から同じまたは互換性のある型のオブジェクトを返すという仮定から、それも null ではないICloneable.Clone()と結論付けcopy、警告をトリガーします。

nullからの復帰はもちろん可能Cloneです。ただし、返すnullとコーディング エラーになるため、null チェックをスキップすることをお勧めします。

于 2014-06-12T19:15:12.747 に答える
2

MSDNから:

実装者へ
の注意 ICloneable インターフェイスでは、Clone メソッドの実装が現在のオブジェクト インスタンスのコピーを返すことだけが必要です。

コントラクトの要件を満たしている場合、Cloneメソッドは決して返してはなりませんnull

于 2014-06-12T19:15:49.583 に答える