Ric*_*odd 2 f# nullreferenceexception
我正在使用第三方API,而笨拙地利用ref参数来产生输出.就个人而言,我真的很讨厌这个API的设计,但这是我现在可以使用的.由于专有代码,我不得不略微隐藏API的数据类型,但这应该与手头的问题无关.
无论如何,在C#中,我可以成功地将null引用作为ref参数传递,如下所示:
IDataType tl = null;
bool success = api.myFunction(ref tl);
Run Code Online (Sandbox Code Playgroud)
但是在F#中,以下内容不起作用
let mutable tl : IDataType = null //null reference assignment in F#
let success = api.myFunction(&tl) //& means ref in F#
Run Code Online (Sandbox Code Playgroud)
它返回一个空引用异常错误.C#中没有返回此类错误.
有没有人经历过这个?我认为它必须是API本身的一个相对古老的设计中的错误.
**编辑:这应该是关闭的,我相信答案不在于F#代码,而在于API,因为它已经有许多与此类似的已知错误.
C#中的API快速而脏的原型设计
namespace API
{
public interface IDataType { void Hi(); }
public class API: IDataType {
public void Hi() { System.Console.WriteLine("Hi!"); }
public bool MyFunction(ref IDataType iface) {
iface = new API();
return true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在同一个CLR中使用F#完全按照你的方式使用它:
let mutable iface : API.IDataType = null
if API.API().MyFunction(&iface) then iface.Hi()
Run Code Online (Sandbox Code Playgroud)
工作没有任何问题.
实际上,您的问题特定于您给定的API,与F#的使用形式无关.
| 归档时间: |
|
| 查看次数: |
368 次 |
| 最近记录: |