Я не думаю, что стандартная практика возвращает 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