Получение указателя на структуру внутри себя (небезопасный контекст)

Короче говоря, я приведу упрощенный пример, где это может быть полезно:

public struct Vector3f {
    public float x;
    public float y;
    public float z;

    public unsafe float this[int index] {
        get {
            // Get "p" somehow, so that it points to "this"...

            return p[index];
        }

        set {
            // Get "p" somehow, so that it points to "this"...

            p[index] = value;
        }
    }
}

Думаю, вы поняли мою точку зрения:

var v = new Vector3f();

Assert(v.x == v[0]);

РЕДАКТИРОВАТЬ 1:

Для те, кто все еще спрашивает:)

Assert(v.y == v[1]);
Assert(v.z == v[2]);

РЕДАКТИРОВАТЬ 2:

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

5
задан Community 23 May 2017 в 11:53
поделиться