为什么以下代码不能编译?
using System;
using System.Linq;
using System.Linq.Expressions;
public static class Extensions
{
public static V? SumOrDefault<T, V>(this IQueryable<T> @this, Expression<Func<T, V>> selector)
where V : struct, IComparable, IComparable<V>, IConvertible, IEquatable<V>, IFormattable
{
Expression<Func<T, V?>> nullableSelector = null; // omitted for brevity
return Queryable.Sum<T>(@this, nullableSelector);
}
}
出现此错误:
error CS1503: Argument 2: cannot convert from 'System.Linq.Expressions.Expression<System.Func<T, V?>>' to 'System.Linq.Expressions.Expression<System.Func<T, decimal>>'
两个问题:
decimal
版本的Sum<>
?decimal?
中找不到该函数的System.Linq.Queryable
版本? public static decimal? Sum<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, decimal?>> selector);
答案 0 :(得分:2)
从技术上讲,如果这行得通,您可以使用小数点无法转换但仍然尊重您的SumOrDefault
( 自定义“例如,“ unsumumable”类)。where
并且由于找不到安全地转换为哪种类型,因此无法找到函数的string
版本。
C#无法将类型过滤为仅数字形式的AFAIK,因此您必须像2001年一样手动重载它们:
decimal?