如何在C#中接近不可为空的引用类型?

时间:2010-02-02 04:14:25

标签: c# .net c++-cli non-nullable

我已阅读了很多non-nullable个问题和答案。看起来在C#(4.0)中接近非可空类型的最佳方法是Jon Skeet的NonNullable<> hack。

但是,似乎C ++ / CLI通过支持托管引用解决了大部分问题:Foo%(而不是本机C ++ Foo&)。编译器通过向参数添加modreq(IsImplicitlyDereferenced)来完成此工作。试图从C#调用这样的函数导致:

'<FunctionName>' is not supported by the language

还有什么比 NonNullable&lt;&gt; 更好吗?

有没有办法(合理地 - 即,没有使用反射)从C#调用C ++ / CLI方法Foo::Method(Bar%)


[edit] 目前似乎没有比 NonNullable&lt;&gt; 更好的了......我希望我能对C ++ / CLI的内容有所了解它已经至少有部分解决方案。

2 个答案:

答案 0 :(得分:11)

我已经碰到了几次......我还没有找到比Skeet解决方案更好的东西。它解决了我遇到的所有情况,所以我必须投票。

我同意这是一个有点哈哈的情况,我们不得不求助于......但他的解决办法确实解决了这个问题。

答案 1 :(得分:1)

是的,规格#:http://research.microsoft.com/en-us/projects/specsharp/

- 编辑:我刚注意到你说过C#4.0;我很相信Spec#不支持该版本。不过,值得回顾一下。

您也可以(我认为)稍后检查,然后通过Gendarme中的规则进行编译:http://www.mono-project.com/Gendarme(假设对4.0运行)