如何在C#中实现非空引用类型?

23

我阅读了许多关于非空的问题和答案。在C# (4.0)中最接近非空类型的方法似乎是Jon Skeet的NonNullable<>技巧。

然而,似乎C++/CLI通过支持托管引用:Foo%(而不是本地C++Foo&)已经解决了大部分问题。编译器通过向参数添加modreq(IsImplicitlyDereferenced)来使其发挥作用。尝试从C#调用此类函数会导致:

'<FunctionName>' is not supported by the language

有没有比NonNullable<>更好的东西?

有没有一种(合理的,即不使用反射的)方法可以从C#中调用C++/CLI方法Foo::Method(Bar%)


[编辑] 看来目前没有比NonNullable<>更好的了……我希望我能在C++/CLI问题上得到一些评论,因为它已经至少有部分解决方案了。

2个回答

11

我遇到过这种情况几次......我还没有找到比Skeet的解决方案更好的东西。它解决了我遇到的所有情况,所以我不得不投票支持它。

我同意这是一种有点hacky的情况,我们不得不采取这种方法......但他的修复确实解决了问题。


7
@Russell - 他问是否有更好的解决方案...经过大量搜索,我从未找到过。如果我即将花费大量时间寻找,那么这就是我希望一开始就得到的答案。这是对他问题的部分回答:“是否有比NonNullable<>更好的东西?” - Nick Craver

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接