Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是指在初始化过程中正在初始化的对象吗?_C#_Syntax_Initialization - Fatal编程技术网

C# 是指在初始化过程中正在初始化的对象吗?

C# 是指在初始化过程中正在初始化的对象吗?,c#,syntax,initialization,C#,Syntax,Initialization,我有一个对象DataParameterInfo(DPI)和两个委托方法,用于将数据从DataReader移动到POCO或从POCO中获取值 例如: new DataParameterInfo<IBulletinPCN> { FieldName = "ChangeProcedure", ParameterName = "@ChangeProcedure", EntityName = "ChangeProcedure", DataType = SqlDbT

我有一个对象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 = (dr, e) => e.ChangeProcedure = dr.IsDBNull(dr.GetOrdinal(this.FieldName)) ? null : dr.GetString(dr.GetOrdinal(this.FieldName)),
当我尝试时,只有“this”指的是创建DPI的类,而不是DPI本身


我能做我想做的吗,如上所述,如果是,如何做?

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


您只需在初始值设定项之后分配
populatentity
属性即可解决此问题。

var x=new Foo{property=bar}只是执行旧
var x=new Foo()的一种简单方法;x、 属性=条
在这种情况下,您只需采用旧式方法,引用以前设置的属性值没有问题。

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

例:

在执行该委托时,您会说:

PopulateEntity(dr, e, this.fieldname);

嗯,好的,我看得出来。DPI是作为静态属性中列表的一部分创建的,但是我可以修改它,使属性由方法填充,然后在。。。但是,如果我不手动编写每一个实体属性,那么访问实体属性就会变得很棘手,我会尽量减少整个过程的手动性。。。不过,这是一个很好的线索。我不知道我怎么会错过这个机会。谢谢
PopulateEntity = (dr, e, fieldname) => e.ChangeProcedure = dr.IsDBNull(dr.GetOrdinal(fieldname)) ? null : dr.GetString(dr.GetOrdinal(fieldname))
PopulateEntity(dr, e, this.fieldname);