2010-02-02 1 views
21

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

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

'<FunctionName>' is not supported by the language 

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

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


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

+0

Ссылка мертв. Новая ссылка: http://codeblog.jonskeet.uk/2008/10/06/non-nullable-reference-types/ –

+0

Исправлено, спасибо ... –

ответ

10

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

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

+1

Это больше похоже на комментарий, чем на ответ. – Russell

+6

@ Russell - Он спросил, есть ли лучшее решение ... после многих поисков я так и не нашел. Если бы я собирался потратить много времени на поиски, это был бы мой ответ с самого начала. Это было в ответ на часть его вопроса: «Есть ли что-нибудь лучше, чем NonNullable <>?» –

1

Да, спецификация #: http://research.microsoft.com/en-us/projects/specsharp/

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

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

Смежные вопросы