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

我读过很多不可空的问题和答案。 看起来在C#(4.0)中接近不可空类型的最佳方法是Jon Skeet的NonNullable hack。

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

 '' is not supported by the language 

有没有比NonNullable 更好的东西?

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


[编辑]似乎目前没有什么比NonNullable 更好…我希望我会对C ++ / CLI的东西有一些评论,因为它已经至少有一个部分解决方案。

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

我同意这是一个hacky的情况,我们不得不诉诸…但他的修复确实解决了问题。

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

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

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