我正在编写一个函数,它是从一种对象到另一种对象的映射器.作为Map方法的参数传入的对象应该有一个字符串索引器,以在对象中找到适当的值(或不是).我真的不在乎mapper是否有Dictionary,DataRow,DataReader等.
有没有办法具体说明传递给方法的参数应该实现字符串索引器?我找不到类似的东西.
如果不可能,我将使用反射将类型转换为可用的类型,但我想知道是否有正确的方法来处理它.
不,你做不到.您可以使用像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将这个想法充实成一个例子.谢谢!)
您可以创建如下界面:
interface IFoo
{
String this[Int32 index] { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
实现此接口的所有类型都必须实现字符串索引器,如果方法的参数类型是IFoo您可以知道它将具有索引器.
| 归档时间: |
|
| 查看次数: |
238 次 |
| 最近记录: |