8

コードサンプルでこれを見ることがあります:

throw Error.ArgumentNull("someParameter");

ここの89 行目に例があります。

Error独自のコードで使用したいと思います。どこで見つけることができますか?

(私は自分でそれを見つけようとしusing、そのファイルの先頭にある名前空間を試し、Visual Studio にそれを見つけさせようとしましたが、今のところうまくいきません。)

4

3 に答える 3

8

これは、ライブラリの作成者が生活を楽にするために定義したヘルパー クラスです。

Error.csファイル:

internal static ArgumentNullException ArgumentNull(string parameterName, string messageFormat, params object[] messageArgs)
{
    return new ArgumentNullException(parameterName, Error.Format(messageFormat, messageArgs));
}

同様の機能を探している場合は、コード コントラクト(Visual Studio の非 Express エディション用) を参照してください。次に、次のように書くことができます。

using System.Diagnostics.Contracts;

void MyMethod(string someParameter)
{
    Contract.Requires<ArgumentNullException>(someParameter != null);

    // ...
}

...そして、この条件が満たされない場合、実行時に例外がスローされます。

于 2013-03-29T23:02:54.923 に答える
5

internalこれは、可視性を備えた内部ヘルパー クラスです。それがあなたがそれを見つけることができなかった理由です。

Microsoft のソース コードでは、さまざまな場所でこのパターンが使用されています。

しかし、なぜそれをするのですか?これにより、すべての例外ハンドラーにそのロジックを配置することなく、一貫性のある適切にフォーマットされたローカライズされた例外をスローできます。

さらに一歩進んで、一部の定義には次のようなコンパイラ ディレクティブが含まれています。

        internal static ArgumentException InvalidEnumArgument( string parameterName, int invalidValue, Type enumClass ) {
#if NETFX_CORE
            return new ArgumentException(Error.Format(CommonWebApiResources.InvalidEnumArgument, parameterName, invalidValue, enumClass.Name), parameterName);
#else
            return new InvalidEnumArgumentException( parameterName, invalidValue, enumClass );
#endif
        }

その他のメソッド ( などPropertyNull()) は、コード分析抑制メッセージで装飾されています。

繰り返しますが、これは単純に、このコードをあらゆる場所で繰り返さないようにするための便利/一貫性のメカニズムです。

ニーズが異なるため、この正確なコードを自分のプロジェクトで使用しようとすることはおそらくお勧めしません。しかし、あなたは確かにそれをパターンとして使用することができます.

于 2013-03-29T23:05:30.777 に答える
0

これはカスタムの内部型であり、BCL には存在しません。

namespace System.Web.Http
{
    /// <summary>
    /// Utility class for creating and unwrapping <see cref="Exception"/> instances.
    /// </summary>
    internal static class Error
    {}
 }

必要に応じて、そこからコピーして使用できます。

于 2013-03-29T23:01:51.083 に答える