public static void GetPointerObject <T>(this T[] array, Action <ArrayGetPointerWithSafe <T> > action) where T : unmanaged { var _ = new ArrayGetPointerWithSafe <T>(array); action(_); _.Dispose(); }
unsafe static void Main(string[] args) { float[] array = Enumerable.Range(1, 100).Select(x => (float)x).ToArray(); //自分で開放 var arrayPtro = new ArrayGetPointerWithSafe <float>(array); float *arrayPtr = arrayPtro.ptr; for (int i = 0; i < array.Length; i++) { Console.WriteLine(*(arrayPtr + i)); } arrayPtro.Dispose(); //自動解放 array.GetPointerObject(tmp => { float *pa = tmp.ptr; for (int i = 0; i < tmp.Length; i++) { Console.WriteLine(*(pa + i)); } }); }