Как сделать массив со ссылками на enum?

306
31 августа 2017, 17:18

Привет всем! Есть массив к которому периодически обращаются извне. Этот массив инициализируется 1 раз и больше его менять нельзя. Например такой массив:

static(или const) KeyCode[] arr = {v1, v2, v3, v4};

Пока не знаю статиком или константным его сделать, но суть в том, что менять его содержимое так: arr[i]=x; нельзя. Однако переменные v могут менять своё содержимое и это должно быть видно через массив. KeyCode - это enum, v1-4 тоже enum-ы. Хожу воокруг да около, в чем проблема: этот массив берет и копирует в себя содержимое enum, то есть в нем копии переменных, а не сами исходные переменные. Если arr был бы классом, то все было бы как надо: можно было бы не заниматься присвоением arr[i] нового значения чтобы изменение содержимого его переменных можно было увидеть через массив. Как можно такое провернуть?

Answer 1

Судя по всему, вы хотите, чтобы элементы вашей коллекции можно было изменять внутри вашего класса, но не снаружи.

Это проще всего сделать так:

class Test
{
    private readonly KeyCode[] arr = { KeyCode.A, KeyCode.B, KeyCode.C, KeyCode.D };
    public ReadOnlyCollection<KeyCode> Arr { get; }
    public Test()
    {
        Arr = Array.AsReadOnly(arr);
    }
}

Теперь изменения, сделанные через arr, будут видны через Arr:

Console.WriteLine(Arr[0]); // A
arr[0] = KeyCode.Z;
Console.WriteLine(Arr[0]); // Z
//Arr[0] = KeyCode.A;    // <-- не скомпилируется
READ ALSO
Как вернуть при запросе ошибку

Как вернуть при запросе ошибку

Можно ли при обращение ReadProcessMemory процесса вернуть ошибку?если возможно то с примеромЦель - запретить в нужном моменте считывать память

321
Как поместить RadioButton в switch?

Как поместить RadioButton в switch?

Здравствуйте! В методе есть две переменные(операнда) и операторКаждая RadioButton соответствует своему оператору

327