significado - ¿Los indexadores estáticos no son compatibles con C#?
clr sql (3)
No, los indexadores estáticos no son compatibles con C #. A diferencia de otras respuestas, sin embargo, veo cómo podría ser fácil tenerlas. Considerar:
Encoding x = Encoding[28591]; // Equivalent to Encoding.GetEncoding(28591)
Encoding y = Encoding["Foo"]; // Equivalent to Encoding.GetEncoding("Foo")
Sería relativamente poco utilizado, sospecho, pero creo que es extraño que esté prohibido, da asimetría sin ninguna razón en particular, por lo que puedo ver.
Esta pregunta ya tiene una respuesta aquí:
- Indicadores estáticos? 4 respuestas
He estado intentando esto de diferentes maneras, pero estoy llegando a la conclusión de que no se puede hacer. Es una función de idioma que he disfrutado de otros idiomas en el pasado. ¿Es solo algo que debería cancelar?
Puede simular indexadores estáticos usando propiedades indexadas estáticas:
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")
No, pero es posible crear un campo estático que contenga una instancia de una clase que use un 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; }
}
}
}
}
... a la que se puede acceder de la manera en que lo intentas. Esto se puede probar en la Ventana Inmediata ...
Memory.Register[0] = 12 * 12;
?Memory.Register[0]
144