Я пробовал это несколько разных способов, но я пришел к выводу, что это невозможно. Это языковая функция, которой я наслаждался с других языков в прошлом. Это просто то, что я должен просто списать?Являются ли статические индексы не поддерживаемыми в C#?
ответ
Нет, статические индексы не поддерживаются в C#. Однако, в отличие от других ответов, я вижу, как можно легко указать их. Рассмотрим:
Encoding x = Encoding[28591]; // Equivalent to Encoding.GetEncoding(28591)
Encoding y = Encoding["Foo"]; // Equivalent to Encoding.GetEncoding("Foo")
Было бы сравнительно редко, я подозреваю, но я думаю, что это странно, что это запрещено - это дает асимметрию без особой причины, насколько я могу видеть.
Вы можете моделировать статические шаговые с использованием статических индексированных свойств:
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")
Хотя ответ Джона (как обычно) является наиболее правильным, это не такая плохая альтернатива для некоторых ситуаций. – Thiru
Нет, но можно создать статическое поле, которое хранит экземпляр класса, который использует указатель ...
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; }
}
}
}
}
... Доступ к которому можно получить способом, которым вы являетесь intendin г. Это может быть проверено в окне Immediate ...
Memory.Register[0] = 12 * 12;
?Memory.Register[0]
144
Точно. У них есть свое место. Другие, говорящие здесь о проблемах дизайна, явно никогда не работали с классическим языком, который позволил, поскольку они очень полезны. – user9991
Да. Я точно говорю. Они имеют очень полезное место в архитектуре. Думаю, у некоторых людей есть свои шторы. – Kilhoffer
Crap. Теперь я должен написать статический метод Cache.Get (key) вместо Cache [key] ... – Gishu