这是visual studio编译器的错误吗?

时间:2016-09-29 03:56:01

标签: c# visual-studio types visual-studio-2015 casting

为了好玩,我决定(暂时)重构一些我发现的代码,以便它使用更实用的风格。 (我想在单个表达式/语句中做所有事情。)

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中的错误?或者是其他事情发生了? (如果它确实是一个错误,是否有一种简单的报告方式?)

0 个答案:

没有答案