Одной вещью, которую большинство (если не все) контейнеры/библиотеки DI приносит Вам, кроме того, является возможность прервать методы для всех экземпляров, созданных через DI.
Лучший способ обозначить неприятные строковые указатели, особенно двойные указатели в структуре, - это просто использовать IntPtr.
public IntPtr mFieldNames;
Это будет Маршал правильно, хотя и не очень полезный тип. Однако, если вы понимаете структуру IntPtr, очень легко получить результирующие строки.
public static List<string> GetAllStrings(IntPtr ptr, int size) {
var list = new List<string>();
for ( int i = 0; i < size; i++ ) {
var strPtr = (IntPtr)Marshal.PtrToStructure(ptr, typeof(IntPtr));
list.Add(Marshal.PtrToStringUni(strPtr));
ptr = new IntPtr(ptr.ToInt64()+IntPtr.Size);
}
return list;
}
Единственным реальным недостатком является то, что вам придется вручную освобождать память