我寻求一种使用lambda语法获取类型索引器属性的方法。这个问题向您展示了如何使用反射来获取它:
https://stackoverflow.com/a/9716775/701346
我测试了这个解决方案并且它可以工作,但它有点太大而且很难以满足我的口味。我想这样做:
Expression<Func<Dictionary<string, string>, string>> index =
e => e[default(string)];
对我来说,这对于索引器的访问者来说是MethodInfo
,但我需要将索引器作为PropertyInfo
,以便我可以将其传递给Expression.MakeIndex
我该怎么做?
答案 0 :(得分:0)
只是删除了这个,但我想保留它以防万一它有所帮助。
我多么愚蠢,不要考虑使用Expression.Call
代替Expression.MakeIndex
。
var p_formcollection = Expression.Parameter(typeof(FormCollection), nameof(FormCollection));
//helper method that does the same thing as in my OP
//I also used Dictionary<,> in my OP, but it's really a FormCollection
var indexer = ExpressionHelpers.GetMethodInfo<FormCollection, string>(e => e[default(string)]);
var collectionAccess = Expression.Call(p_formcollection, indexer, Expression.Constant(pi.PropertyInfo.Name));