Ha habido muchas preguntas sobre el soporte para tipos de referencia que no admiten nulos en .NET. La gran esperanza eran los contratos de código, pero se limita a la verificación en tiempo de ejecución para aquellos que tienen un presupuesto limitado.Tipos de referencia que no admiten nulos (una vez más)
En cuanto a los enfoques que no sean contratos de código, Jon Skeet escribió un blog post sobre esto hace unos años, y uno de los comentaristas proporcionó un aspecto útil NonNull struct que tenía IL modificado para deshabilitar el constructor predeterminado. Esto parece un enfoque excelente, y me puedo imaginar extenderlo para proporcionar todo tipo de microtypes que no admite nulos. La manipulación de IL podría ser un paso posterior a la creación desencadenado por un atributo en la estructura, p.
//Microtype representing a non-zero age, so we want to disable the default ctor
[NoDefaultConstructor]
public struct Age
{
public Age(int age)
{
// Implementation (including validation) elided
}
}
Antes de seguir investigando, me gustaría preguntar si alguien sabe de algún problema que esto pueda causar. No he podido pensar en ninguno.
¿Cuál es su caso de uso para necesitar un tipo de referencia no nulo? –
Para aquellos cuyo presupuesto se extiende a ReSharper, hay alguna funcionalidad útil para verificar la nulidad allí (aunque obviamente no tan completa como los contratos en las costosas ediciones de VS) – AakashM
@AnthonyPegram Creo que la mayoría de los usos de los tipos de referencia son implícitamente no nulos , por lo que exigir que a través de la firma del método sea un triunfo en términos de documentación y seguridad. – Akash