public static T GetOrCreate <T>(this NativeMap <T> map, IntPtr ptr) where T : class { if (ptr == IntPtr.Zero) { return(null); } if (map.TryGetValue(ptr, out var value)) { return(value); } var obj = (T)Activator.CreateInstance(typeof(T), BindingFlags.Instance | BindingFlags.NonPublic, null, new object[] { ptr }, null); map[ptr] = obj; return(obj); }