我想构建一个通用类,可用于在 C# 中实现参数化属性。我想要的基本代码是这样的:
public class ParameterizedProperty<typeReturn, typeIndexer> {
private typeReturn oReturn = default(typeReturn);
public typeReturn this[typeIndexer oIndexer] {
get { return oReturn[oIndexer]; }
set { oReturn[oIndexer] = value; }
}
}
但由于typeReturn
是未知/不受限制的,编译器正在绘制oReturn[oIndexer]
线上。
那么我该如何让它发挥作用呢?我的第一个(嗯,第二个)想法是使用反射来有条件地找到索引器(如果没有找到则引发错误),或者可能where typeReturn: I???
在类定义上使用修饰符。但是如果我使用修饰符,会I???
是什么?
感谢您对此问题的任何解决方案!
注意:如何通过反射正确找到索引器(据说)在这里找到:http: //www.dotnet247.com/247reference/msgs/3/16665.aspx(见最后一条消息)。
编辑:正如马修在下面指出的......我在原始描述中有一些错字/错误......我自己的错,真的......最初是在睡觉前写的!我想要的代码看起来更像这样:
public class ParameterizedProperty<typeReturn, typeIndexer> {
private typeReturn[] oReturn;
public ParameterizedProperty(typeReturn[] oSource) {
oReturn = oSource;
}
public typeReturn this[typeIndexer oIndexer] {
get { return oReturn[oIndexer]; }
set { oReturn[oIndexer] = value; }
}
}
......你会打赌什么有效!?
呃,不完全是!仍在抱怨typeIndexer
(想要一个“无法”的类型),但更好!我还添加了一个构造函数来解决那个讨厌的“我实际上不能将 oReturn 设置为任何东西”的问题 =)
但即使这样看起来也不太正确(数组总是由 INT 索引,对吗?如果是这样就不需要 typeIndexer)......我明天必须在 wurk 再看一遍 =)