23

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

但是,似乎 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 的评论,因为它至少已经有了部分解决方案。

4

2 回答 2

11

我遇到过几次......我还没有找到比 Skeet 的解决方案更好的方法。它解决了我遇到的所有案例,所以我必须给它投票。

我同意我们不得不求助于这种情况有点棘手……但他的解决方案确实解决了问题。

于 2010-02-02T04:21:57.627 回答
1

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

-- 编辑:我刚刚注意到你说 C# 4.0;我很确定 Spec# 不支持该版本。尽管如此,还是值得回顾一下。

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

于 2010-02-11T05:22:00.687 回答