为了好玩,我决定(暂时)重构一些我发现的代码,以便它使用更实用的风格。 (我想在单个表达式/语句中做所有事情。)
public ZDecimal TotalInvCurrPGAValue
{
get
{
ZDecimal result = 0m;
foreach (PGA element in this.Where(x => !((IPGADataCorrection)x).IsDeletedOrBeingDeleted()))
{
result += element.US_InvCurrPGAValue;
}
return result;
// This should be equivalent to the above
return this
.Where( x => !( (IPGADataCorrection)x ).IsDeletedOrBeingDeleted() )
.Aggregate<PGA, ZDecimal>( 0m, (x, y) => x + y.US_InvCurrPGAValue );
}
}
但是我收到错误。当我将鼠标悬停在我的聚合lambda中的y.US_InvCurrPGAValue
上时,visual studio说
&#39; ZDecimal&#39;不包含&#39; US_InvCurrPGAValue&#39;的定义没有扩展方法&#39; US_InvCurrPGAValue&#39;接受类型&#39; ZDecimal&#39;的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)
但y
的类型为PGA
,而非ZDecimal
。这在Aggregate(.Aggregate<PGA,ZDecimal>
)的类型参数中清楚明确地指出。此外,视觉工作室实际上认识到这一事实,因为当我将鼠标悬停在y
上时,它会显示一个工具提示,表明y
属于PGA
类型。我尝试手动转换只是为了看看会发生什么:((PGA)y).US_InvCurrPGAValue
然后我又得到了另一个错误:
无法转换类型&#39; CargoWise.Types.ZDecimal&#39;到&#39; Enterprise.Customs.US.Business.PGA&#39;
因此即使visual studio知道y
属于PGA
类型,有时也会认为它属于ZDecimal
类型。这一切似乎有点精神分裂。
我需要做点什么吗?或者这是Visual Studio中的错误?或者是其他事情发生了? (如果它确实是一个错误,是否有一种简单的报告方式?)