2016-08-15 8 views
2

私は、カスタム例外を記述し、それらのためにシリアライズを実装することを面倒です。私は、メンバーの1人にアクセスする前にSerializationInfoのインスタンスをnullにチェックすると、ReSharperはチェックが冗長であり、インスタンスがnullではないことがわかっていることに気付きました。値の型ではありませんが、Reference Sourceを突き止めたところでは、デフォルトのコンストラクタはありません。 ReSharperがnullでないと言うことができるのはこれですか?何か別の理由はありますか?これはおそらくバグでしょうか?SerializationInfoインスタンスは決してNullではありませんか?

+0

この文の前にコード内の他の場所で既に使用されていますか? –

+0

@BenjaminDrolet - これは、同じパラメータを持つ基本Exceptionコンストラクタから派生したコンストラクタのパラメータとして使用されています。これは、基本メソッドGetObjectDataのオーバーライドでパラメータとしても使用されています。 – bubbleking

+1

@bubbleking [this](http://stackoverflow.com/questions/5067819/how-does-resharper-know-expression-is-always-true)はおそらくあなたの質問に答えます – galenus

答えて

0

基本Exceptionクラスのコンストラクタを呼び出すためだと思います。このような何か:

protected SomeException(SerializationInfo info, StreamingContext context) 
     : base(info, context) 
    { 
     if (info != null) 
     { 
      // Some work... 
     } 
    } 

ReSharperのは情報パラメータのためにその内部でベースのコンストラクタチェックを知っています。私はそれが公式MSDN公式に従っていると思う:

例外:
ArgumentNullException - infoパラメータがnullです。
SerializationException - クラス名がnullまたはHResultがゼロ(0)です。

if (info == null) 
    throw new ArgumentNullException("info"); 

ベースコンストラクタが呼び出された場合、値または例外が発生します。
Resharperは式が常に真であると言います。そして今度は、ドキュメントはほとんど決して変更されないので正しいです。 しかし、私は多くの場合、Resharperが示唆しているものは好きではありません。

関連する問題