gpt4 book ai didi

c# - 委托(delegate)给 C# 中的属性

转载 作者:行者123 更新时间:2023-11-30 16:29:38 24 4
gpt4 key购买 nike

我正在使用 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;
...
}
}

进入更通用的东西,我在其中动态构建索引和“setter”之间的映射:

但是如果有更简洁的东西就好了,比如:

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

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

问题:

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

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

最佳答案

PropMapper 需要接收一个 lambda expression作为参数,表示属性。棱镜的NotificationObject在其 RaisePropertyChanged 事件中接收到这样的表达式。

可以上Prism's source code看看如何使用 lambda 表达式提取属性并使用它。

关于c# - 委托(delegate)给 C# 中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6177413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com