获得"get_Item"MethodInfo的优化方法

sma*_*man 6 c# reflection items methodinfo

现在,我有: targetType.GetMethod("get_Item", BindingFlags.Instance)

有更好的吗?

jas*_*son 6

我更喜欢使用PropertyInfo.GetIndexParameters:

var indexers = targetType.GetProperties(bindingFlags)
                         .Where(p => p.GetIndexParameters().Any());
                         .Select(p => p.GetGetMethod());
Run Code Online (Sandbox Code Playgroud)

现在indexersIEnumerable<MethodInfo>索引器的getter匹配指定的BindingFlags给定bindingFlags.

注意代码如何读取targetType,获取与之匹配的属性bindingFlags,将那些作为索引器,然后投影到getter.它比使用魔术字符串要神秘得多"get_Item",并且可以轻松处理多个索引器.

如果你知道只有一个,你当然可以使用Single.如果您正在寻找特定的一个,您可以相应地检查结果GetIndexParameters.