我正在编写一个函数,它是从一种对象到另一种对象的映射器.作为Map方法的参数传入的对象应该有一个字符串索引器,以在对象中找到适当的值(或不是).我真的不在乎mapper是否有Dictionary,DataRow,DataReader等.
有没有办法具体说明传递给方法的参数应该实现字符串索引器?我找不到类似的东西.
如果不可能,我将使用反射将类型转换为可用的类型,但我想知道是否有正确的方法来处理它.
不,你做不到.您可以使用像Andrew这样的界面,或者您可以传入一个Func
检索索引值的界面.
public void ConsumeIndexedFunction(Func something) { var foo = something("bar"); // do something with foo } public void TestMethod( Dictionary myDictionary, DataTable myDataTable, IDataReader myDataReader) { ConsumeIndexedFunction(x => myDictionary[x]); ConsumeIndexedFunction(x => myDataTable.Rows[0][x]); ConsumeIndexedFunction(x => myDataReader[x]); }
(感谢Michael Meadows将这个想法充实成一个例子.谢谢!)
您可以创建如下界面:
interface IFoo { String this[Int32 index] { get; set; } }
实现此接口的所有类型都必须实现字符串索引器,如果方法的参数类型是IFoo
您可以知道它将具有索引器.