C#中不支持静态索引器吗?

我一直在尝试这几种不同的方式,但我得出的结论是不能做到的。 这是我过去从其他语言享受的语言function。 这只是我应该注销的东西吗?

不,静态索引器在C#中不受支持。 然而,与其他答案不同的是,我明白如何容易地指出拥有它们。 考虑:

Encoding x = Encoding[28591]; // Equivalent to Encoding.GetEncoding(28591) Encoding y = Encoding["Foo"]; // Equivalent to Encoding.GetEncoding("Foo") 

我怀疑这是相对较less使用的,但我认为这是被禁止的 – 这让我觉得不对称是没有特别原因的。

您可以使用静态索引属性来模拟静态索引器:

 public class MyEncoding { public sealed class EncodingIndexer { public Encoding this[string name] { get { return Encoding.GetEncoding(name); } } public Encoding this[int codepage] { get { return Encoding.GetEncoding(codepage); } } } private static EncodingIndexer StaticIndexer; public static EncodingIndexer Items { get { return StaticIndexer ?? (StaticIndexer = new EncodingIndexer()); } } } 

用法:

 Encoding x = MyEncoding.Items[28591]; // Equivalent to Encoding.GetEncoding(28591) Encoding y = MyEncoding.Items["Foo"]; // Equivalent to Encoding.GetEncoding("Foo") 

不,但是可以创build一个静态字段来保存使用索引器的类的实例…

 namespace MyExample { public class Memory { public static readonly MemoryRegister Register = new MemoryRegister(); public class MemoryRegister { private int[] _values = new int[100]; public int this[int index] { get { return _values[index]; } set { _values[index] = value; } } } } } 

…可以按照您的意图访问。 这可以在立即窗口中testing…

 Memory.Register[0] = 12 * 12; ?Memory.Register[0] 144