是静态的索引不是在C#支持? [重复] 是静态的索引不是在C#支持? [重复](Are sta

2019-05-12 03:46发布

这个问题已经在这里有一个答案:

  • 静态索引器? 7个回答

我一直想这几种不同的方式,但我达到了,它不能做的结论。 这是一个语言特点我已经从过去其他语言的享受。 难道仅仅是我应该只写了吗?

Answer 1:

不,静态索引没有在C#的支持。 不像其他的答案,但是,我怎么看也很容易被点有他们。 考虑:

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

这将是相对很少使用,我怀疑,但我认为这是奇怪的是,它的禁止 - 它给了什么特别的理由不对称据我可以看到。



Answer 2:

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

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")   


Answer 3:

没有,但也可以创建包含使用一个索引类的实例的静态字段...

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; }
         }
      }
   }
}

......这能在你正打算的方式进行访问。 这可以在立即窗口来测试...

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


文章来源: Are static indexers not supported in C#? [duplicate]
标签: c# .net clr