在C#对象初始化程序语法中为什么我们不能将一个属性分配给另一个属性

时间:2013-01-31 11:40:34

标签: c# c#-4.0

您好我正在使用C#Object Initializer,如

public class Invoice
    {
        public decimal GrossSum { get; set; }
        public decimal GrossSumComp { get; set; }
    }
    public class ABC()
    {
        public Invoice Invoice {get;set;}

        public ABC(decimal grossSum)
        {
            Invoice=new Invoice()
            {
                GrossSum=grossSum,
                GrossSumComp=**GrossSum**
            };
        }
    }

我看到我们无法将One Property的值分配给另一个属性,就像上面我尝试将GrossSum分配给GrossSumComp并且我得到了编译错误。只是好奇知道为什么它不允许这样。任何帮助都将被高度评价。

2 个答案:

答案 0 :(得分:2)

因为它是如何指定的。第二行中的GrossSum是对名为GrossSum的变量的引用,而不是正在初始化的对象的属性。

用Eric Lippert的话来解释。对于要实现的功能,它必须是

  • 建议
  • 分析
  • 设计
  • 实施
  • 测试

这些都会产生成本,因此他们应该增加价值以匹配成本,最好超过成本。

如果对该功能进行简单的处理,可能的成本可能(很多)高于潜在价值。

在您的情况下,您只需指定grossSum而不是GrossSum

这是一个简单的工作

答案 1 :(得分:1)

在这种情况下的错误信息是你的答案:

The name 'GrossSum' does not exist in the current context

如果没有给定的上下文,编译器如何知道GrossSum是什么?无法指定this或类似的东西,以表明您所引用的GrossSum属性是在您正在初始化的对象上定义的属性。