是否有任何可能的方法使一个索引器使用非全局索引器的整个类?这是我想要做的事情的要点。请注意,在这个例子中,你应该假装我不能移动data
或创建另一个Dictionary
。自定义名称索引器
class MyClass
{
protected Dictionary<string,object> data = new Dictionary<string,object>();
public object Foo[int index]
{
get {
string name = String.Format("foo{0}",index);
return data[name];
}
}
public object Bar[int index]
{
get {
string name = String.Format("bar{0}",index);
return data[name];
}
}
}
我会再能引用名为foo15
或bar12
的data
的一个项目,像这样
MyClass myClass = new MyClass();
Console.WriteLine(myClass.Foo[15]);
Console.WriteLine(myClass.Bar[12]);
我知道你可以做到这一点,但是这不是我想要的。
public object this[string index]
{
get {
return data[index];
}
}
为什么你想要这第一个地方?您如何预期其行为与普通索引器不同? – EJoshuaS
@EJoshuaS,我不想公开'data'的所有属性,但我也不想定义'FooX',其中X是一个数字15次。这会导致一次又一次的相同的代码,并且很难迭代'FooX'属性。我想让它更容易,所以'MyClass'的用户可以引用'Foo [15]'。 –
@EJoshuaS,我怀疑我最终不得不使'Foo'成为一个函数(例如'public object Foo(int index){return data [String.Format(“foo {0}”,index)];}' ,但我真的更喜欢使用属性 –