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

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

3 Solutions collect form web for “C#中不支持静态索引器吗?”

不,静态索引器在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 
  • 为什么C#generics不能从C ++模板中的genericstypes参数中派生出来?
  • 奇怪的铸造行为。 无法将对象(int)强制转换为long
  • 在运行时获取当前的.NET CLR版本?
  • 解决MSB3247 - 在同一个相关程序集的不同版本之间发现冲突
  • 在StringBuilder.ToString()的上下文中是什么意思?
  • CLR和CLI - 有什么区别?
  • 根源是什么?
  • 在C ++ / CLI中,帽子angular色^做什么?
  • 性能惊喜与“为”和可为空的types
  • 自动创build空的C#事件处理程序
  • 从另一个文件夹中parsing程序集引用