在使用Linq扩展时,看到这样的代码是正常的:
IEnumerable<int> enumerable = GetEnumerable();
int sum = 0;
if (enumerable != null)
{
sum = enumerable.Sum();
}
Run Code Online (Sandbox Code Playgroud)
为了提高代码质量,我编写了以下扩展方法来检查可以为空的枚举并打破linq执行.
public static IEnumerable<T> IgnoreIfEmpty<T>(this IEnumerable<T> enumerable)
{
if (enumerable == null) yield break;
foreach (var item in enumerable)
{
yield return item;
}
}
Run Code Online (Sandbox Code Playgroud)
所以,我可以重构代码,如下所示:
var sum = GetEnumerable().IgnoreIfEmpty().Sum();
Run Code Online (Sandbox Code Playgroud)
我现在的问题:
更新: 我的目标框架是:3.5
显然,代码中的绝大多数错误都是空引用异常.是否有任何一般技术可以避免遇到空引用错误?
除非我弄错了,否则我知道在F#这样的语言中,不可能有空值.但这不是问题,我问如何避免C#等语言中的空引用错误.
我正在尝试编写一个通用扩展方法,让我这样做:
this.startDate = startDateXAttribute.NullOrPropertyOf<DateTime>(() =>
{
return DateTime.Parse(startDateXAttribute.Value);
});
Run Code Online (Sandbox Code Playgroud)
NullOrPropertyOf()将返回null如果它是一个上使用的null对象(例如,如果startDateXAttribute是null),或返回的结果Func,如果它不为空.
这种扩展方法会是什么样的?