@huseyintugrulbuyukisik Да, поле обозначения типа должно работать нормально. К сожалению, нет ясного способа заставить его работать с указателями из-за довольно строгих правил.

мер, как перегруженный[] сеттер-газопоглотитель,

    public T this[int i]
    {
        get
        {
            unsafe
            {
                T* p = (T*)hArr.ToPointer(); // hArr is a C++ object pointer(IntPtr)
                return *(p + i);
            }

        }
        set
        {
            unsafe
            {
                T* p = (T*)hArr.ToPointer();
                *(p + i) = value;
            }
        }
    }

и компилятор жалуется (подчеркивает) на это "не может получить адрес ..." для управляемого типаT.

я знаюT во время выполнения будет только float, double, int или byte, но я не знаю, как сообщить об этом компилятору, поэтому он мне доверяет.

Почему я не могу использовать его, все равно указатели, я могу переполнить любой тип массива, если я не буду осторожен.

Как я могу достичь этого (подобным образом или другим способом), не будучи намного медленнее, чем:

    public float this[int i]
    {
        get
        {
            unsafe
            {
                float* p = (float*)hArr.ToPointer();
                return *(p + i);
            }

        }
        set {
            unsafe
            {
                float* p = (float*)hArr.ToPointer();
                *(p + i) = value;
            }
        }
    }

Мне здесь важна не только производительность, но и простота кода. (один код для всех типов T) Интерфейсы здесь не могут помочь.

Ответы на вопрос(1)

Ваш ответ на вопрос