考虑以下 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 (我知道还有改进的余地,但它是一个早期的原型)