【发布时间】:2012-05-05 10:27:19
【问题描述】:
考虑以下 MemberExpressions
someObject.someMethod(p => p.FirstName)
someObject.someMethod(p => p.Contact.Address.City)
我正在编写一些代码来遍历表达式并查看每个成员以确定它是否使用给定属性进行装饰。这样做的目的是生成这样的“路径”:
p.Contact.Address.City -> "Contact.Address.City"
但如果用特定属性修饰,路径将生成不同的名称:
...
[BsonElement("Locale")]
public string City {get; set;}
...
p.Contact.Address.City -> "Contact.Address.Locale"
仅供参考:这是我为使用 MongoDB 编写的一个小型库
因此,遍历表达式并检查属性是使用反射完成的。它不是很慢,但还有改进的余地。
我想为路径解析添加一些缓存(将成员表达式转换为字符串),但我不确定为成员表达式生成签名\哈希的最佳\最有效方法。
我尝试了一些方法,但它们实际上减慢了代码速度。这种方法需要足够快,以便每次都生成哈希,以便它可以用于查找,并且显然必须比遍历表达式更快。
有什么想法吗?
编辑: 代码在这里:https://github.com/bryanmig/MongoFluentUpdater/blob/master/FluentUpdate/FluentUpdater.cs (我知道还有改进的余地,但它是一个早期的原型)
【问题讨论】: