相关疑难解决方法(0)

扩展LINQ以接受可以为空的枚举

在使用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)

我现在的问题:

  1. 在运行时我的扩展方法有哪些惩罚?
  2. 以这种方式扩展linq是一个好习惯吗?

更新: 我的目标框架是:3.5

.net c# linq

40
推荐指数
3
解决办法
1588
查看次数

避免空引用异常

显然,代码中的绝大多数错误都是空引用异常.是否有任何一般技术可以避免遇到空引用错误?

除非我弄错了,否则我知道在F#这样的语言中,不可能有空值.但这不是问题,我问如何避免C#等语言中的空引用错误.

c# exception nullreferenceexception

22
推荐指数
5
解决办法
3万
查看次数

"如果object为null,则为null;如果object为null,则为object.member"的快捷方式

我正在尝试编写一个通用扩展方法,让我这样做:

this.startDate = startDateXAttribute.NullOrPropertyOf<DateTime>(() =>
{
    return DateTime.Parse(startDateXAttribute.Value);
});
Run Code Online (Sandbox Code Playgroud)

NullOrPropertyOf()将返回null如果它是一个上使用的null对象(例如,如果startDateXAttributenull),或返回的结果Func,如果它不为空.

这种扩展方法会是什么样的?

c# generics

8
推荐指数
1
解决办法
6154
查看次数

标签 统计

c# ×3

.net ×1

exception ×1

generics ×1

linq ×1

nullreferenceexception ×1