c# - 在 C# Object Initializer Syntax 为什么我们不能在其中将一个属性分配给另一个

标签 c# c#-4.0

您好,我正在使用 C# 对象初始化器,例如

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**
            };
        }
    }

而且我看到我们无法将一个属性的值分配给其中的另一个属性,就像上面一样,我试图将 GrossSum 分配给 GrossSumComp,但出现了编译错误。只是想知道为什么它不允许这样做。任何帮助都将得到高度认可。

最佳答案

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

套用 Eric Lippert 的话。对于要实现的功能,它确实是

  • 提议
  • 分析
  • 设计
  • 已实现
  • 测试过

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

如果该功能有一个简单的变通办法,很可能成本可能会(很多)高于潜在值(value)。

在您的情况下,您可以简单地分配 grossSum 而不是 GrossSum。这是一个简单的解决方法

关于c# - 在 C# Object Initializer Syntax 为什么我们不能在其中将一个属性分配给另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14624866/

相关文章:

c# - 在 C# 中使用 IPv6 连接到 mySql 服务器

c# - 在 C# 中实现试用应用程序

c#-4.0 - 使用动态关键字调用子类方法

c# - .Net 3.5 上的 Web 服务客户端应用程序的 SSL 和过时的 TLS(1.0 和 1.1)

c# - 导入图像 MVVM WPF

javascript - 将日期从客户端(Javascript)发送到 WebApi 的最佳方式是什么

c# - 具有通用元素和约束的通用接口(interface)

c# - NSubstitute When...Do 定义不会被后续定义覆盖

c# - 锁和线程池

javascript - Angularjs 与 browsersync post 方法作为选项发送