一个扩展方法需要一个开放的泛型 IEnumerable。
我应该在方法内部检查列表是否为空吗?
我认为列表永远不应该为空,但是可以有 count == 0。
您如何处理这种情况?
更新:
我忘记提到该方法是一个递归方法,其中列表被递归调用/传递了。
一个扩展方法需要一个开放的泛型 IEnumerable。
我应该在方法内部检查列表是否为空吗?
我认为列表永远不应该为空,但是可以有 count == 0。
您如何处理这种情况?
更新:
我忘记提到该方法是一个递归方法,其中列表被递归调用/传递了。
这要看情况。
如果无法处理空列表,则需要测试并引发ArgumentNullException
异常:
if (list == null)
{
throw new ArgumentNullException("some suitable message");
}
if (list == null || list.Count() == 0)
{
.....
}
是的,你应该检查一下。在LINQ中,这也是一个相当常见的模式,特别是在这种情况下抛出异常。
public static void MyExtension<T>(this IEnumerable<T> source)
{
if (source == null)
{
throw new ArgumentNullException("source");
}
// ...
}
public static class FrameworkExtensions
{
/// <summary>
/// null tolerant access to a Collection
///
/// usage:
/// foreach (int i in returnArray.AsNotNull())
/// {
/// // do some more stuff
/// }
/// </summary>
/// <typeparam name="T">Type of collection</typeparam>
/// <param name="original"></param>
/// <returns></returns>
public static IEnumerable<T> AsNotNull<T>(this IEnumerable<T> original)
{
return original ?? new T[0];
}
}
更新:
我相信你的意思是将列表作为方法参数传递,但在这种情况下解决方案很明显(甚至检查对象本身):
public static void ExtensionMethod<T>(this IEnumerable<T> list,
IEnumerable<T> anOtherlist)
{
bool listItselfNotNull = list != null;
bool anOtherListNotNull = anOtherList != null;
}
null
上使用扩展方法。 - Lukazoid