在创建过程中访问自己的类属性
本文关键字:属性 自己的 访问 创建 过程中 | 更新日期: 2023-09-27 18:06:07
最初创建一个新的类记录时,如何访问它自己的属性?
下面是我的示例结构,我想将Total
设置为No1
和No2
的和
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
属性访问器。
对象或集合初始化项不能引用被初始化的对象实例。
1具体来说,c# 3.0规范第26.4节对象和集合初始化式