我已阅读了很多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的内容有所了解它已经至少有部分解决方案。
答案 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运行)