Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在公共结构中预先设置值?_C#_.net_Struct - Fatal编程技术网

C# 如何在公共结构中预先设置值?

C# 如何在公共结构中预先设置值?,c#,.net,struct,C#,.net,Struct,} 我想预先设置total的值 建议我最好的方法! 谢谢大家! 您可能不应该为此实体使用结构。和 public struct customerItemListStruct { public int ID { get; set; } public string name { get; set; } public double rate { get; set; } public int quantity { get; set;

}

我想预先设置total的值

建议我最好的方法!
谢谢大家!

您可能不应该为此实体使用结构。和

public struct customerItemListStruct { 
        public int ID { get; set; } 
        public string name { get; set; } 
        public double rate { get; set; } 
        public int quantity { get; set; } 
        //public double total = rate * quantity; 
以下可能更合适:

public double total
{
    get
    {
        return rate * quantity;
    }
}

您可能不应该为此实体使用结构。和

以下可能更合适:

public double total
{
    get
    {
        return rate * quantity;
    }
}

现有答案涵盖了实现这一点的最简单方法。但是,如果您访问总计的次数可能比更新速率和数量的次数多得多,那么您可以更改周围的内容,以便在每次访问时不计算
Total
,而是在更改
Rate
Quantity
时重新计算

public class CustomerItemList { 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public double Rate { get; set; } 
    public int Quantity { get; set; } 
    public double Total {
      get { return Rate * Quantity; }
    }
}

通常,让
Total
进行计算是最好的方法,但在重要的情况下,了解备选方案总是很有用的。

现有答案涵盖了最简单的方法。但是,如果您访问总计的次数可能比更新速率和数量的次数多得多,那么您可以更改周围的内容,以便在每次访问时不计算
Total
,而是在更改
Rate
Quantity
时重新计算

public class CustomerItemList { 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public double Rate { get; set; } 
    public int Quantity { get; set; } 
    public double Total {
      get { return Rate * Quantity; }
    }
}

通常,让
Total
进行计算是最好的方法,但在重要的情况下,了解备选方案总是很有用的。

如果预期项目具有值语义,那么将其变为可变类将导致灾难。如果调用
SomeDataSource.GetCustomer(whatever)
并获取一个
CustomerItemList
,对列表的更改(1)将可预测地影响数据源中的项,(2)不可预测地影响宇宙中的任何其他内容,除非或直到更改的项传递回数据源,或(3)以任意且不一定可预测的方式影响宇宙中的其他事物?可变类类型可以执行上述任何操作;开放字段结构始终在好的点上执行第二个操作。如果您提到的约束是有问题的,那么Actor模式将是一个合适的选择。对于OO程序员来说,可变值类型通常更难推理,因为它们的语义不同,更糟糕的是,只是不同而已。结构肯定不是邪恶的——它们只是在使用不当时才可能存在。基于名称
CustomerItemList
这里感觉结构可能是错误的选择。基于名称,我可能同意,但考虑到内容,我认为名称更可能是
CustomerList
。我对编程感到恼火的一点是,混杂对象引用是所有事物的正确数据类型(在Java中,它是唯一的非原语)。在许多情况下,让代码读取、更改和写回(覆盖旧项或创建与旧项类似的新项)都很有用。在这样的上下文中,对象被用作一个分段可变的值,将其表示为分段可变的值似乎是最自然的。如果期望该项具有值语义,那么将其变为可变类将导致灾难。如果调用
SomeDataSource.GetCustomer(whatever)
并获取一个
CustomerItemList
,对列表的更改(1)将可预测地影响数据源中的项,(2)不可预测地影响宇宙中的任何其他内容,除非或直到更改的项传递回数据源,或(3)以任意且不一定可预测的方式影响宇宙中的其他事物?可变类类型可以执行上述任何操作;开放字段结构始终在好的点上执行第二个操作。如果您提到的约束是有问题的,那么Actor模式将是一个合适的选择。对于OO程序员来说,可变值类型通常更难推理,因为它们的语义不同,更糟糕的是,只是不同而已。结构肯定不是邪恶的——它们只是在使用不当时才可能存在。基于名称
CustomerItemList
这里感觉结构可能是错误的选择。基于名称,我可能同意,但考虑到内容,我认为名称更可能是
CustomerList
。我对编程感到恼火的一点是,混杂对象引用是所有事物的正确数据类型(在Java中,它是唯一的非原语)。在许多情况下,让代码读取、更改和写回(覆盖旧项或创建与旧项类似的新项)都很有用。在这样的上下文中,对象被用作分段可变值,因此将其表示为分段可变值似乎是最自然的。