0

拡張メソッドで例外を処理するための最良の方法は何ですか?これには、メソッドから生成された例外と、nullオブジェクトで拡張メソッドを呼び出すことによって発生したnull例外が含まれます。

適切なビジネス機能で拡張メソッドを呼び出す前に処理するのは良いですか、またはメソッドは例外に注意する必要があります。

ここでアイデアを与えるために、コードサンプルがあります

class ABC
    {
        private readonly string name;
        public ABC(string name)
        {
            this.name = name;
        }

        public string Name { get { return this.name; } }
    }

    internal static class ABCExtension
    {
        internal static void GetName(this ABC abc)
        {
            Console.WriteLine(abc.Name);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            ABC abc = new ABC("baam");
            abc = null;
            abc.GetName();

            Console.Read();
        }
    }

abcオブジェクトがnullであるため、これによりnull例外が生成されます。

詳細については、こちらをご覧ください。私はクラスの責任の間で混乱しています

例外を処理するのは誰の責任か知りたかったのです。メソッドを提供している拡張クラスまたはそれを使用しているクラス?

さらに詳しい情報が必要な場合はお知らせください。

4

3 に答える 3

3

拡張メソッドに渡される引数は、通常のメソッドの引数に似ています。これには、拡張メソッドの最初の引数(this型名の前)が含まれていました。メソッドが入力パラメーターにルールを適用する場合は、それらをチェックする必要があります。また、メソッドの呼び出しで処理する必要のある条件がある場合は、呼び出し元のメソッドで例外を発生させます。

ちなみに、常にnullをチェックし、NullReferenceException発生させないでください。NullReferenceExceptionコードにバグがあることを意味します。

于 2013-01-26T14:06:33.260 に答える
1

通常、GetName()のようなメソッドでは、パラメーターをチェックし、nullの場合は。をスローしNullArgumentExceptionます。ただし、GetName()がメンバー関数の場合、。abc.GetName()が発生しNullReferenceExceptionます。したがって、拡張メソッドの場合は、メンバー関数をエミュレートし、NullReferenceException

于 2013-01-26T14:22:41.883 に答える
0

他のメソッドと同様に、拡張メソッドの例外を処理および処理する方法に違いはありません。(try / catchを使用して)外部で例外をキャッチし、(ArgumentExceptionを使用して)メソッド内のパラメーターを検証するようにしてください。

于 2013-01-26T14:02:14.757 に答える