扩展方法应该处理null吗?

时间:2014-04-16 21:13:30

标签: c# extension-methods

这是不好的做法(回归null部分)?

public static ObservableCollection<TSource> ToObservableCollection<TSource>(
    this IEnumerable<TSource> source)
{
    if (source == null) return null;
    return new ObservableCollection<TSource>(source);
}

2 个答案:

答案 0 :(得分:7)

你应该抛出一个ArgumentNullExcception。大多数.NET Framework扩展方法都是这样做的。或者,不执行任何操作,让ObservableCollection<T>构造函数执行此操作。

public static ObservableCollection<TSource> ToObservableCollection<TSource>(this     IEnumerable<TSource> source)
{
    if (source == null)
    {
        throw new ArgumentNullException("source");
    }

    return new ObservableCollection<TSource>(source);
}

答案 1 :(得分:0)

我写我的处理空参数,所以我主张空检查。扩展方法在IL代码中以不同方式发出。它们作为类的静态方法发出,因此参数可以为null。

UPDATE:抛出异常或正确处理null值是我在扩展方法中处理null值的方法。