Почему я не могу использовать GcHandle.Alloc для закрепления массива перечислений - PullRequest
4 голосов
/ 02 октября 2011

Я хочу сделать следующее:

public enum Blah
{
    A,B
}

[Test,Explicit]
public void TestEnumGcHandle()
{
    var ea = new Blah[10];
    GCHandle.Alloc(ea, GCHandleType.Pinned);
}

, но я получаю:

System.ArgumentException : Object contains non-primitive or non-blittable data.

Являются ли .net Enums слепыми типами?(Marshalling) утверждает, что Enums являются blittable, но я не могу закрепить их массив.Может ли это быть ошибкой в ​​GcHandle.Alloc?Я использую .NET 3.5.

1 Ответ

3 голосов
/ 03 октября 2011

Это немного грубовато в моей книге, но перечисления не примитивны (typeof (Blah). IsPrimitive - ложь) и не могут быть кратковременными. Отсутствует в списке blittable типов . Связанный ТАК вопрос не прав насчет этого. Проблема в том, что нет способа узнать, каким может быть размер базового целочисленного типа для нативного перечисления. Я думаю, что это трудно, потому что, безусловно, есть способ указать это в управляемом типе enum. Ну, не могу этого сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...