Я пробовал это несколько разных способов, но я пришел к выводу, что это невозможно. Это языковая функция, которой я наслаждался с других языков в прошлом. Это просто то, что я должен просто списать?
Стационарные индексы не поддерживаются в С#?
Ответ 1
Нет, статические индексы не поддерживаются в С#. Однако, в отличие от других ответов, я вижу, как можно легко указать их. Рассмотрим:
Encoding x = Encoding[28591]; // Equivalent to Encoding.GetEncoding(28591)
Encoding y = Encoding["Foo"]; // Equivalent to Encoding.GetEncoding("Foo")
Было бы относительно редко использоваться, я подозреваю, но мне кажется странным, что это запрещено - это дает асимметрию без какой-либо конкретной причины, насколько я могу видеть.
Ответ 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")
Ответ 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; }
}
}
}
}
... Кого можно получить в том виде, в котором вы собираетесь. Это можно проверить в окне Immediate...
Memory.Register[0] = 12 * 12;
?Memory.Register[0]
144