编程语言
首页 > 编程语言> > 委派给C#中的属性

委派给C#中的属性

作者:互联网

我正在使用Odbc DataReader做一些事情.查询结果中的每一行都应转换为ResultObject,如下所示:

struct ResultObject {
    public int Prop1 { get; set; }
    public string Prop2 { get; set; }
    ...
}

为了编写更多特定于域的代码,我想转换此代码

var query = "SELECT Prop1, Prop2, ... FROM MyTable;";
... connect, submit query
while( reader.Read() ) {
  var fieldValue = fields[ fieldindex ];
  switch( fieldindex ) {
     case( indexProp1 ): result.Prop1.Set( (int) fieldValue); break;
     case( indexProp2 ): result.Prop2.Set( (string) fieldvalue); break;
     ...
  }
}

到更通用的东西中,我在其中动态建立索引和“设置者”之间的映射:

但是最好有一些更简洁的东西:

PropMapper mappers[] = {
 new PropMapper("Prop1", ResultType.Prop1 ),
 new PropMapper("Prop2", ResultType.Prop2 ),
 ....
};

但是,我不知道如何从ResultType的属性创建PropMapper.

问题:

如何生成包装/委托给定类型属性的对象?

注意:尽管ORM对此非常有用,但我实际上只是在问C#如何允许创建委托(或任何等效的东西)

解决方法:

PropMapper需要接收一个lambda expression作为参数,代表该属性. Prism的NotificationObject在其RaisePropertyChanged事件中收到这样的表达式.

您可以看一下Prism’s source code,如何使用lambda表达式提取属性并使用它.

标签:properties,generics,delegates,c
来源: https://codeday.me/bug/20191208/2090787.html