最初创建新的类记录时,如何访问自己的属性?
以下是我的示例结构,我想将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
答案 0 :(得分:4)
您可以像这样更新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
};
答案 1 :(得分:3)
您正在使用object initialiser syntax并且在那里您无法访问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; }
}
答案 2 :(得分:3)
stated作为DavidG,在使用对象初始化语法时,您无法访问get
属性访问器。
The C# specification 1 具体说明
对象或集合初始化程序无法引用正在初始化的对象实例。
1 具体来说,C#3.0规范,第26.4节对象和集合初始化器