IDataReader如何定义它的索引器?

时间:2013-06-17 19:25:24

标签: c#

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

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

失败。如果我将IDataReader替换为IMyInterface定义为:

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

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

2 个答案:

答案 0 :(得分:6)

有两个索引器,一个采用int,一个采用字符串。由于您使用Single并且有两个项匹配,因此会抛出异常。

您有几种选择:

  1. 使用First获取两个
  2. 中的一个
  3. 使用Where并将两个索引器作为序列处理
  4. 添加一个额外的约束,以确保您只获取带有int的索引器,而不是带有字符串的索引器。

答案 1 :(得分:6)

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