Quiero que los programadores y yo sepamos que un método no quiere null
y si envía null
de todos modos, el resultado no será bueno.C#: Cómo implementar y usar un atributo NotNull y CanBeNull
Hay NotNullAttribute
y CanBeNullAttribute
en Lokad Shared Libraries, en el espacio de nombre Lokad.Quality
.
Pero, ¿cómo funciona? Miré el código fuente de estos dos atributos, y se ve así:
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Parameter |
AttributeTargets.Property | AttributeTargets.Delegate |
AttributeTargets.Field, AllowMultiple = false, Inherited = true)]
[NoCodeCoverage]
public sealed class NotNullAttribute : Attribute
{
}
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Parameter |
AttributeTargets.Property | AttributeTargets.Delegate |
AttributeTargets.Field, AllowMultiple = false, Inherited = true)]
[NoCodeCoverage]
public sealed class CanBeNullAttribute : Attribute
{
}
Dos clases vacías que heredan de Attribute
. ¿Cómo se usan? ¿Tienes que buscar la documentación xml y saber que está allí? Porque intenté hacer mi propia copia del atributo y usar la versión de Lokad, pero cuando traté de enviar un nulo directamente, no recibí ningún mensaje. Ni de ReSharper ni de VS. Lo que esperaba en realidad. Pero, ¿cómo se usan? ¿De alguna manera puedo hacer que VS genere advertencias para mí si trato de enviar algo que es nulo allí? ¿O solo se usa en algún tipo de marco de prueba? ¿O?
Para comentar sobre su caso específico, esos atributos no hacen nada y son solo "documentación". Las otras respuestas dan buenas alternativas, sin embargo. – Sander
'Nullable' es un nombre mejor para' CanBeNull', simplemente diciendo :) –