在创建过程中访问自己的类属性

本文关键字:属性 自己的 访问 创建 过程中 | 更新日期: 2023-09-27 18:06:07

最初创建一个新的类记录时,如何访问它自己的属性?

下面是我的示例结构,我想将Total设置为No1No2的和

    class ROWDATA
    {
        public int No1;
        public int No2;
        public int Total;
    }
    ROWDATA RowData = new ROWDATA
    {
        No1 = reader.GetInt32(reader.GetOrdinal("fuel_tank_no_1")),
        No2 = reader.GetInt32(reader.GetOrdinal("fuel_tank_no_2")),
        Total = No1 + No2 // this does not work
     };

我得到一个错误,说明The name 'No1' does not exist in the current context

在创建过程中访问自己的类属性

您可以这样更新Total属性:

public int Total { get { return No1 + No2; } }

你也可以这样用:

var RowDataNo1 = reader.GetInt32(reader.GetOrdinal("fuel_tank_no_1"));
var RowDataNo2 = reader.GetInt32(reader.GetOrdinal("fuel_tank_no_2"));
ROWDATA RowData = new ROWDATA 
{
   No1 = RowDataNo1,
   No2 = RowDataNo2,
   Total = RowDataNo1 + RowDataNo2
};

您正在使用对象初始化器语法,并且在那里您无法访问read属性。您可以使用已经读取的两个值,也可以更改属性。

使用

ROWDATA RowData = new ROWDATA
{
    No1 = reader.GetInt32(reader.GetOrdinal("fuel_tank_no_1")),
    No2 = reader.GetInt32(reader.GetOrdinal("fuel_tank_no_2")),
    Total = reader.GetInt32(reader.GetOrdinal("fuel_tank_no_1")) + 
            reader.GetInt32(reader.GetOrdinal("fuel_tank_no_2"))
 };

在这种情况下,最好将值存储在变量中并使用它们,而不是重复访问reader对象。

更改总属性

首选的选项是将您的Total属性更改为如下内容:

public int Total
{
    get { return No1 + No2; }
}

如DavidG所述,当使用对象初始化器语法时,您无法访问get属性访问器。

c#规范1明确规定了

对象或集合初始化项不能引用被初始化的对象实例。


1具体来说,c# 3.0规范第26.4节对象和集合初始化式