0

在扩展方法中处理异常的最佳方法是什么?这包括从方法生成的异常以及在空对象上调用扩展方法引起的空异常。

在适当的业务功能中调用扩展方法之前处理好还是方法应该注意异常。

只是在这里给出想法是代码示例

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 对象为空。

在此处添加详细信息以进行更多说明。我对班级的责任感到困惑

我想知道谁负责处理异常。提供方法的扩展类或使用它的类?

如果需要任何进一步的细节,请告诉我。

4

3 回答 3

3

传递给扩展方法的参数类似于常规方法的参数。这包括扩展方法的第一个参数(this在类型名称之前)。如果您的方法对输入参数强制执行任何规则,它应该检查它们。如果有一个条件需要调用方法处理,就让调用方法引发异常。

顺便说一句,总是检查空值,不要让它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 回答