Pergunta

Esta questão já tem uma resposta aqui:

Eu tenho tentado isso de algumas maneiras diferentes, mas estou chegando à conclusão de que não pode ser feito. É um recurso de linguagem que eu tenha gostado de outras línguas no passado. É apenas algo que eu deveria apenas escrever off?

Foi útil?

Solução

Não, indexadores estáticas não são suportados em C #. Ao contrário de outras respostas, no entanto, não vejo como poderia facilmente ser o ponto em tê-los. Considere o seguinte:

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

Seria relativamente raramente usado, eu suspeito, mas eu acho que é estranho que é proibido -. Ele dá assimetria por nenhuma razão em particular, tanto quanto eu posso ver

Outras dicas

Você pode simular indexadores estáticos usando propriedades estáticas indexados:

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

Uso:

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

Não, mas é possível criar um campo estático que contém uma instância de uma classe que usa um indexador ...

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

... O que poderia ser acessado da maneira que você está pretendendo. Isso pode ser testado na janela imediata ...

Memory.Register[0] = 12 * 12;
?Memory.Register[0]
144
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top