C#:需要方法参数的索引器

Jas*_*per 3 c#

我正在编写一个函数,它是从一种对象到另一种对象的映射器.作为Map方法的参数传入的对象应该有一个字符串索引器,以在对象中找到适当的值(或不是).我真的不在乎mapper是否有Dictionary,DataRow,DataReader等.

有没有办法具体说明传递给方法的参数应该实现字符串索引器?我找不到类似的东西.

如果不可能,我将使用反射将类型转换为可用的类型,但我想知道是否有正确的方法来处理它.

mqp*_*mqp 6

不,你做不到.您可以使用像Andrew这样的界面,或者您可以传入一个Func<T, string>检索索引值的界面.

public void ConsumeIndexedFunction<T>(Func<string, T> something)
{
    var foo = something("bar");
    // do something with foo
}

public void TestMethod(
    Dictionary<string, object> myDictionary,
    DataTable myDataTable,
    IDataReader myDataReader)
{
    ConsumeIndexedFunction(x => myDictionary[x]);
    ConsumeIndexedFunction(x => myDataTable.Rows[0][x]);
    ConsumeIndexedFunction(x => myDataReader[x]);
}
Run Code Online (Sandbox Code Playgroud)

(感谢Michael Meadows将这个想法充实成一个例子.谢谢!)


And*_*are 5

您可以创建如下界面:

interface IFoo
{
    String this[Int32 index] { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

实现此接口的所有类型都必须实现字符串索引器,如果方法的参数类型是IFoo您可以知道它将具有索引器.