如何泛型可为null的类型



当从数据库提取时,我想用特定的方式处理null值,如下所示:

/// <summary>
/// Implemented this because the Linq Sum() method does not fit our requirements for handling null values:
/// 1. Empty or null source should return a null, not zero
/// 2. If non-empty, and all elements are null, then return null, not zero
/// 3. If non-empty, and some elements are null, ignore them
public static decimal? NullableSum(this IEnumerable<decimal?> source)
{
if (source == null || source.Count() == 0) return null;
decimal? sum = null;
foreach (var v in source)
{
if (v != null)
{
if (sum == null)
{
sum = 0;
}
sum += v;
}
}
return sum;
}

我如何将其通用化?

我强烈怀疑:

public static decimal? NullableSum(IQueryable<decimal?> source)
{
return source.Sum();
}

由于IQueryable的Sum使用数据库的Sum,SQL Server的Sum执行您想要的操作;开箱即用";。这样做还有一个好处,即不会通过导线传递所有数据(您当前的代码就是这样做的(。

显然,编写此方法是不必要的-您可以直接调用内置的Sum

鉴于该功能是内置的,因此不需要";一般化";它-因为它已经在那里,随时可以使用。

最新更新