Extension方法中的异常处理

时间:2013-01-26 13:57:57

标签: c# c#-4.0 exception

在Extension方法中处理Exception的最佳方法是什么?这包括从方法生成的异常以及由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();
        }
    }

这将生成null异常,因为abc对象为null。

添加详细信息以获得更多说明。我很担心上课的责任

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

如果需要进一步的详细信息,请告诉我。

3 个答案:

答案 0 :(得分:3)

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

顺便说一句,alwasy检查空值并且不要让NullReferenceException发生。 NullReferenceException表示您的代码中存在错误。

答案 1 :(得分:1)

通常,在GetName()之类的方法中,您将检查参数,如果为null,则抛出NullArgumentException。但是,如果GetName()是成员函数,则abc.GetName()将导致NullReferenceException。因此,在扩展方法的情况下,它应该模拟成员函数,并抛出NullReferenceException

答案 2 :(得分:0)

如何处理和处理扩展方法中的异常(如任何其他方法)没有区别。确保捕获异常(使用try / catch)并验证方法中的参数(使用ArgumentException)。