Я не думаю, что стандартная практика возвращает byref
тип. Этот тип действительно предназначен для параметров метода, в основном для взаимодействия с C # ITypedPointer<'P,'T>
или ref
параметров. Взгляните на этот вопрос StackOverflow для хорошего объяснения.
То, что вы можете сделать, это изменить метод на вашем интерфейсе, чтобы взять кортеж byref<'T>
и byref
(использование byref
не разрешено с помощью параметров в карри) и unit
вместо этого вернуться . Затем вы можете вызвать GetReference
как любой стандартный метод .NET с out
параметром в C #. Это будет выглядеть примерно так:
type ITypedPointer<'P, 'T> = interface end
type IPool<'P, 'T when 'T: struct> =
abstract member GetReference: ITypedPointer<'P, 'T> * byref<'T> -> unit
let Ref<'TPool, 'P, 'T when 'TPool :> IPool<'P, 'T>> (pool: 'TPool) pointer =
let mutable value = Unchecked.defaultof<'T>
pool.GetReference(pointer, &value)
value