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#和Java之间的主要区别是什么?
  • 为什么C#不允许像C ++这样的非成员函数
  • 如何检测正在使用哪个.NET运行时(MS与Mono)?
  • SQL Server 2005中VARBINARY字段的大小
  • .NET中API断开更改的权威指南
  • 我们是否总是在类中包含一个默认的构造函数?
  • 在Delphi中使用/不使用JCL托pipeCLR - 例子
  • 试试赶上加快我的代码?
  • .NET CLR是否真的为当前处理器优化?
  • 在C ++ / CLI中,帽子angular色^做什么?
  • 根源是什么?