在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。
添加详细信息以获得更多说明。我很担心上课的责任
我想知道谁的责任是处理异常。提供使用它的方法或类的扩展类?
如果需要进一步的详细信息,请告诉我。
答案 0 :(得分:3)
传递给扩展方法的参数类似于常规方法的参数。这包括扩展方法的第一个参数(在类型名称之前使用this
)。如果您的方法对输入参数强制执行任何规则,则应检查它们。如果存在应该通过调用方法处理的条件,则将异常引发到调用方法。
顺便说一句,alwasy检查空值并且不要让NullReferenceException
发生。 NullReferenceException
表示您的代码中存在错误。
答案 1 :(得分:1)
通常,在GetName()之类的方法中,您将检查参数,如果为null,则抛出NullArgumentException
。但是,如果GetName()是成员函数,则abc.GetName()
将导致NullReferenceException
。因此,在扩展方法的情况下,它应该模拟成员函数,并抛出NullReferenceException
答案 2 :(得分:0)
如何处理和处理扩展方法中的异常(如任何其他方法)没有区别。确保捕获异常(使用try / catch)并验证方法中的参数(使用ArgumentException)。