2

出于某种原因,这段代码:

MethodInfo iDataReaderIndexerProperty = typeof(IDataReader).GetProperties()
    .Single(property => property.GetIndexParameters().Length > 0)
    .GetGetMethod();

失败。如果我替换IDataReaderIMyInterface定义为:

interface IMyInterface
{
    String this[Int32 index] { get; }
}

它工作正常。如何IDataReader定义它的索引器?

4

2 回答 2

6

有两个索引器,一个接受一个 int 一个接受一个字符串。由于您正在使用Single并且有两个匹配的项目,它将引发异常。

你有几个选择:

  1. 用于First获得两者之一
  2. Where将两个索引器作为一个序列使用和处理
  3. 添加一个额外的约束以确保您只获得采用 int 的索引器,而不是采用字符串的索引器。
于 2013-06-17T19:29:29.793 回答
6

该索引器是在 上定义的IDataRecord,而不是IDataReader; 所以你需要从 查询typeof(IDataRecord)使用 Servy 观察到有多个重载(stringvs int)。

于 2013-06-17T19:33:21.767 回答