2017-05-16 3 views
1

カスタムヘルパーを使用して引数の検証を簡略化したいと考えています。カスタム引数の検証ヘルパーを使用するとコード解析が中断されます

public static void ThrowIfNull(this object value, string parameterName) 
{ 
    if (value == null) 
    { 
     throw new ArgumentNullException(parameterName); 
    } 
} 

しかし、当然の静的コード分析は、このヘルパーを使用しているとき、私は公共の方法で入力を検証しないことを知らないので、それは私に検証されていないパブリックメソッドの引数についてCA1062エラーが発生します。

特に問題はthis oneです。

このヘルパーが引数のNULL検証を処理するコードアナライザを教える方法はありますか?この問題の適切な解決策は何ですか?

+3

@DipenShah非常に簡単です。それを試してください: 'try { string s = null; s.ThrowIfNull( "s"); } catch(Exception ex) {/ *ブレークポイントをここに設定*/ } ' –

+0

どのようなコードの解析ですか?沢山あります。 – Evk

+1

@Ed Plunkett面白い、いいも知っている! –

答えて

1

は、次の名前を持つ属性を作成します。

[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)] 
public sealed class ValidatedNotNullAttribute : Attribute {} 

を次にあなたが検証している引数に適用します:

public static void ThrowIfNull([ValidatedNotNull] this object value, string parameterName) 
{ 
    if (value == null) 
    { 
     throw new ArgumentNullException(parameterName); 
    } 
} 

、警告が離れて行く必要があります。

この属性は、.netフレームワーク自体を含む多くのライブラリで使用されています(たとえば、here)。

+0

ありがとう、私はこのようなテクニックがあると期待しています。 ReSharperは、同様の種類の注釈を使用して、そのようなヘルパーの作業を行います。私は明日これを試し、あなたの答えを受け入れるでしょう。 –

+0

はい、それはうまくいきますが、残念ながらそれはどこにも書かれていません。少なくともResharperの属性とは異なり、見つからなかったのです。 – Evk

関連する問題