【发布时间】:2016-12-13 18:32:14
【问题描述】:
是否有任何可能的方法来创建一个使用索引器而不是整个类的全局索引器的属性?这是我想做的事情的要点。请注意,在此示例中,您应该假装我无法移动 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,我不想公开
data的所有属性,但我也不想定义FooX,其中X 是一个数字15 次。这导致一遍又一遍地生成相同的代码,并且难以迭代FooX属性。我想让它更容易,这样MyClass的用户就可以引用Foo[15]。 -
@EJoshuaS,我怀疑我最终不得不将
Foo设为一个函数(例如public object Foo( int index ) { return data[String.Format("foo{0}",index)]; },但我真的更喜欢使用属性。 -
似乎特定语法并不比仅使用方法好得多(因为使用普通方法您只需执行 Foo(15),即字符数相同)。
标签: c# c#-4.0 indexing properties