您需要声明具有索引器属性的接口,使用该接口作为约束,并且类型参数类需要实现该接口以满足约束.
由于您无法控制要使用的类,因此无效.
另一种方法是使Indexer
类将get/set操作作为单独的参数:
public class Indexer { private Funcgetter; private Action setter; public object this[int index] { get { return getter(index); } set { setter(index, value); } } public Indexer(Func g, Action s) { getter = g; setter = s; } } public static class IndexerExtensions { public static Indexer ToIndexer(this DataRow row) { return new Indexer(n => row[n], (n, v) => row[n] = v); } public static Indexer ToIndexer(this IDataReader row) { return new Indexer(n => row[n], (n, v) => row[n] = v); } }
然后你可以这样做:
DataRow row = null; IDataReader reader = null; var ind1 = row.ToIndexer(); var ind2 = reader.ToIndexer(); var val1 = ind1[0]; var val2 = ind1[0];