Как я могу приблизиться к необнуляемым ссылочным типам в C # сегодня? - PullRequest
22 голосов
/ 02 февраля 2010

Я прочитал многие из ненулевых вопросов и ответов. Похоже, что лучший способ приблизиться к ненулевым типам в C # (4.0) - взломать Jon Skeet NonNullable <> .

Однако, похоже, что C ++ / CLI решил большую часть проблемы, поддерживая управляемые ссылки: Foo% (вместо нативного C ++ Foo&). Компилятор делает эту работу, добавляя modreq(IsImplicitlyDereferenced) к аргументу. Попытка вызвать такую ​​функцию из C # приводит к:

'<FunctionName>' is not supported by the language

Есть ли что-нибудь лучше, чем NonNullable <> ?

Есть ли способ (разумно - т.е. без использования отражения) вызвать метод C ++ / CLI Foo::Method(Bar%) из C #?


[edit] Кажется, в настоящее время нет ничего лучше, чем NonNullable <> ... Я хотел бы получить некоторые комментарии по поводу C ++ / CLI, поскольку он уже хотя бы частичное решение.

Ответы [ 2 ]

11 голосов
/ 02 февраля 2010

Я сталкивался с этим несколько раз ... Я еще не нашел ничего лучше, чем решение Скита. Решены все дела, с которыми я столкнулся, поэтому я должен отдать свой голос.

Я согласен, что это странная ситуация, когда мы должны прибегнуть к этому ... но его исправление действительно решает проблему.

1 голос
/ 11 февраля 2010

Да, спец. Номер: http://research.microsoft.com/en-us/projects/specsharp/

- Правка: я только что заметил, что вы сказали C # 4.0; Я уверен, что Spec # не поддерживает эту версию. Тем не менее, обзор стоит того.

Вы также можете (я думаю) проверить на более позднем этапе, а затем скомпилировать, используя правило в Жандарме: http://www.mono -project.com / Gendarme (при условии, что оно работает против 4.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...