我有一个我继承的应用程序,但没有原始代码。我使用Reflector 9反编译了程序集,其中一个结果模型卡在标题中。通常这种错误很简单,但这一次令我感到困惑。完整代码如下,错误在于包含
的行 (((nullable2 = this.Variations) = nullable2.HasValue
变体是在代码中使用
在10行后定义的属性 public decimal? Variations { get; set; }
该功能的完整代码是:
public decimal GMActual
{
get
{
decimal? nullable2;
decimal? nullable3;
decimal? pOValue = this.POValue;
if ((pOValue.HasValue ? pOValue.GetValueOrDefault() : (((nullable2 = this.Variations) = nullable2.HasValue ? new decimal?(nullable2.GetValueOrDefault()) : ((decimal?) (nullable3 = null))).HasValue ? nullable2.GetValueOrDefault() : 0M)) == 0M)
{
return 0M;
}
pOValue = this.POValue;
pOValue = this.MonthActual;
pOValue = this.POValue;
return (((pOValue.HasValue ? pOValue.GetValueOrDefault() : (((nullable2 = this.Variations) = nullable2.HasValue ? new decimal?(nullable2.GetValueOrDefault()) : ((decimal?) (nullable3 = null))).HasValue ? nullable2.GetValueOrDefault() : 0M)) - (pOValue.HasValue ? pOValue.GetValueOrDefault() : (((nullable2 = this.CostOnSage) = nullable2.HasValue ? new decimal?(nullable2.GetValueOrDefault()) : ((decimal?) (nullable3 = null))).HasValue ? nullable2.GetValueOrDefault() : 0M))) / (pOValue.HasValue ? pOValue.GetValueOrDefault() : (((nullable2 = this.Variations) = nullable2.HasValue ? new decimal?(nullable2.GetValueOrDefault()) : null).HasValue ? nullable2.GetValueOrDefault() : 0M)));
}
}
据我所见。我将十进制分配给小数。这是一个直接的值赋值,但是,我错过了什么?
感谢您的任何建议
答案 0 :(得分:0)
你想用代码实现什么目标?
你是想检查平等吗?如果是这样,那么将需要在return语句中的所有实例中替换= with ==。
答案 1 :(得分:0)
这对我来说没有任何意义:(((nullable2 = this.Variations) = nullable2.HasValue
,从我在这里看到的,这是if语句的条件部分。我想你想做的更像是这样:
nullable2 = this.Variations
nullable2.HasValue ? ... //and the rest of the statement
或者你试图检查它是否为空且等于变化?然后这应该工作:
(nullable2 != null && nullable2 == this.Variations) ? ...//the rest of the statement.
答案 2 :(得分:0)
反编译器接缝搞乱了代码 - 尝试另一个代码进行检查。你怎么知道,你'修复'是正确的?
PS:你想偷窃那段代码吗?它被混淆了:原来的程序员接缝不希望你看到那个代码;)。