Компилятор говорит, что я не могу взять адрес поля только для чтения типа значения

У меня есть структура:

struct S {
    public readonly int Value1;
    public readonly int Value2;
    public S(int value1, int value2) {
        this.Value1 = value1;
        this.Value2 = value2;
    }
}

и я пытаюсь взять адрес Value2:

var s = default(S);
unsafe {
    var r = new IntPtr(&s.Value2);
}

но я получаю ошибку компилятора:

Cannot take the address of the given expression

Я думал, что смогу взять адреса полей? Что происходит?


person Craig Gidney    schedule 08.07.2013    source источник
comment
stackoverflow .com/questions/5079736/   -  person    schedule 08.07.2013
comment
Это аналогичный вопрос, но разрешение совершенно другое. Проблема была синтаксической, а не семантической. Кроме того, единственное упоминание о readonly - это немного неправильный ответ, который, кажется, говорит о том, что результат является копией, а не только для чтения.   -  person Craig Gidney    schedule 08.07.2013


Ответы (1)


По-видимому, это не работает с полями только для чтения. Изменение S на это:

struct S {
    public int Value1;
    public int Value2;
}

устраняет проблему.

person Craig Gidney    schedule 08.07.2013