@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) Интерфейсы здесь не могут помочь.