请参考初始化中正在初始化的对象?

时间:2012-05-04 13:24:14

标签: c# syntax initialization

我有一个对象DataParameterInfo(DPI),其中包含一些委托方法,用于将数据从DataReader移动到POCO或从POCO中获取值。

示例:

new DataParameterInfo<IBulletinPCN>
{
    FieldName = "ChangeProcedure",
    ParameterName = "@ChangeProcedure",
    EntityName = "ChangeProcedure",
    DataType = SqlDbType.NVarChar,
    FieldType = FieldType.Other,
    PopulateEntity = (dr, e) => e.ChangeProcedure = dr.IsDBNull(dr.GetOrdinal("ChangeProcedure")) ? null : dr.GetString(dr.GetOrdinal("ChangeProcedure")),
    ReadEntity = e => e.ChangeProcedure
}

喜欢在PopulateEntity委托中引用我的DPI的Fieldname属性,如下所示:

    PopulateEntity = (dr, e) => e.ChangeProcedure = dr.IsDBNull(dr.GetOrdinal(FieldName)) ? null : dr.GetString(dr.GetOrdinal(FieldName)),

或者

    PopulateEntity = (dr, e) => e.ChangeProcedure = dr.IsDBNull(dr.GetOrdinal(this.FieldName)) ? null : dr.GetString(dr.GetOrdinal(this.FieldName)),

当我尝试时,只有“this”指的是创建DPI的类,而不是DPI本身。

我可以在上面做我正在尝试的事情,如果是的话,怎么做?

3 个答案:

答案 0 :(得分:1)

您不能引用具有该类的对象初始值设定项的类的另一个成员 - 这将导致循环引用。

您只需在初始化程序之后分配PopulateEntity属性即可解决此问题。

答案 1 :(得分:1)

您可以通过更改该委托的调用方将字段名作为参数传递给您的委托:

例如:

PopulateEntity = (dr, e, fieldname) => e.ChangeProcedure = dr.IsDBNull(dr.GetOrdinal(fieldname)) ? null : dr.GetString(dr.GetOrdinal(fieldname))

并且在您执行该委托时,您说:

PopulateEntity(dr, e, this.fieldname);

答案 2 :(得分:0)

var x = new Foo { property = bar }只是执行旧var x = new Foo(); x.property=bar;的一种简便方法。对于这种情况,您只需要以旧式方式执行此操作,其中引用先前设置的属性值没有问题。