MVC 模型:赋值的左侧必须是变量、属性或索引器

Posted

技术标签:

【中文标题】MVC 模型:赋值的左侧必须是变量、属性或索引器【英文标题】:MVC Model: The left hand side of an assignment must be a variable, property or indexer 【发布时间】:2016-05-09 21:00:37 【问题描述】:

我有一个我继承的应用程序,但没有原始代码。我已经使用 Reflector 9 对程序集进行了反编译,其中一个生成的模型被标题中的错误所困扰。通常这种错误很简单,但这次却让我感到莫名其妙。完整代码如下,错误在于包含

的行
  (((nullable2 = this.Variations) = nullable2.HasValue 

Variations 是在代码后面 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)));
        
    

据我所知。我将小数分配给小数。这是一个简单的值分配,但是,我错过了什么?

感谢您的任何建议

【问题讨论】:

使用== 运算符进行比较,使用= 进行赋值 有两行包含(((nullable2 = this.Variations) = nullable2.HasValue。错误是在if 还是return 行? 两行都有。 代码被混淆了:尝试减少它:f.e. 'nullable3' 始终为 null,因此 ' ((decimal?) (nullable3 = null))).HasValue' 为 false... 我确实尝试减少它,但它导致变量未定义变量的错误。这是一个奇怪的结果,因为我可以想象如果牙套有问题会出现这种情况。但情况似乎并非如此,因为没有其他属性或方法受到影响,所以我回到原来的错误 【参考方案1】:

你想用代码实现什么?

您的意思是检查是否相等?如果是这样,则需要在您的 return 语句中的所有出现中将 = 替换为 ==。

【讨论】:

【参考方案2】:

这对我来说没有任何意义:(((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.

【讨论】:

【参考方案3】:

反编译器接缝弄乱了代码 - 尝试另一个检查。您还想知道什么是您“修复”是正确的?

PS:你是想盗取那个代码吗?它被混淆了:原始程序员接缝不希望您看到该代码;)。

【讨论】:

哈哈,那个人离开了大楼(大约 2 年前,拿走了所有的代码,也许吧?我们不知道。剩下的只是一堆已编译的二进制文件,用于加载网络应用程序...)没有文档没有同事在公司新手我...我尝试过 ilspy、telerik 和最后的 Reflector。不涉及代码窃取,但总是对更好的方法持开放态度:)

以上是关于MVC 模型:赋值的左侧必须是变量、属性或索引器的主要内容,如果未能解决你的问题,请参考以下文章

C# 错误中的左侧赋值

MVC4 模板只能用于字段访问

Numpy 花式索引和赋值

Yii框架 模型类 Models

赋值表达式中的左侧无效

如何利用AngularJS绑定两个控制器并变量赋值