在创建期间访问自己的类属性

时间:2014-05-31 11:31:46

标签: c#

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

以下是我的示例结构,我想将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

3 个答案:

答案 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节对象和集合初始化器