2010-02-02 7 views
21

He leído muchas de las non-nullable preguntas y respuestas. Parece que la mejor manera de acercarte a los tipos que no aceptan nulos en C# (4.0) es el truco de Jon Skeet NonNullable<>.¿Cómo puedo acercarme a los tipos de referencia que no admiten nulos en C# hoy?

Sin embargo, parece que C++/CLI ha resuelto gran parte del problema al admitir referencias administradas: Foo% (en lugar de C++ nativo Foo&). El compilador hace que esto funcione agregando modreq(IsImplicitlyDereferenced) al argumento. Tratando de llamar a una función de este tipo de C# resultados en:

'<FunctionName>' is not supported by the language 

¿Hay algo mejor que NonNullable <>?

¿Hay alguna forma de (razonablemente - es decir, sin usar la reflexión) llamar a un método de C++/CLI Foo::Method(Bar%) desde C#?


[editar] Parece que hay actualmente nada mejor que NonNullable <> ... Me gustaría que se han conseguido algunos comentarios sobre el C++/CLI cosas, ya que ya tiene al menos un parcial de solución.

+0

El enlace está muerto. Nuevo enlace: http://codeblog.jonskeet.uk/2008/10/06/non-nullable-reference-types/ –

+0

Solucionado, gracias ... –

Respuesta

10

Me he encontrado con esto algunas veces ... Todavía tengo que encontrar algo mejor que la solución de Skeet. Ha resuelto todos los casos que he encontrado, así que tengo que darle mi voto.

Estoy de acuerdo en que es un poco una situación hacky que tenemos que recurrir a eso ... pero su solución resuelve el problema.

+1

Esto se parece más a un comentario que a una respuesta. – Russell

+6

@Russell - Me preguntó si había una solución mejor ... después de buscar mucho, nunca encontré ninguna. Si estaba por pasar mucho tiempo buscando, es la respuesta que quisiera desde el principio. Esto fue en respuesta a una parte de su pregunta: "¿Hay algo mejor que NonNullable <>?" –

1

Sí, # especificaciones: http://research.microsoft.com/en-us/projects/specsharp/

- Editar: Me he dado cuenta de que has dicho C# 4.0; Estoy bastante seguro de que SpeC# no es compatible con esa versión. Sin embargo, vale la pena una revisión.

También puede ser capaz de (creo) para comprobar en una etapa un poco más tarde a continuación, compilar, a través de una regla en Gendarme: http://www.mono-project.com/Gendarme (suponiendo que se ejecuta contra 4,0)

Cuestiones relacionadas