0

我有一个带有几个委托方法的对象 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 本身。

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

4

3 回答 3

1

您不能在该类的对象初始化程序中引用该类的另一个成员 - 这将导致循环引用。

您可以通过在初始化程序之后PopulateEntity简单地分配您的属性来解决此问题。

于 2012-05-04T13:27:40.277 回答
1

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

前任:

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

在执行该委托时,您说:

PopulateEntity(dr, e, this.fieldname);
于 2012-05-04T13:44:10.047 回答
0

var x = new Foo { property = bar }只是旧方法的一种简便方法var x = new Foo(); x.property=bar; 对于这种情况,您只需要使用旧方法即可,引用以前设置的属性值没有问题。

于 2012-05-04T13:32:33.817 回答