Voglio consentire ai programmatori e al sottoscritto di sapere che un metodo non desidera null
e se si invia comunque null
ad esso, il risultato non sarà carino.C#: Come implementare e utilizzare un attributo NotNull e CanBeNull
C'è uno NotNullAttribute
e uno CanBeNullAttribute
in Lokad Shared Libraries, nello spazio dei nomi Lokad.Quality
.
Ma come funziona? Ho guardato il codice sorgente di questi due attributi, e sembra che questo:
[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
{
}
Due classi vuote che ereditano da Attribute
. Come vengono utilizzati? Devi cercare la documentazione xml e sapere che è lì? Perché ho provato a creare la mia copia dell'attributo e ad usare la versione di Lokad, ma quando ho provato a inviare un null direttamente, non ho ricevuto alcun messaggio. Né da ReSharper né da VS. Quale mi aspettavo in realtà. Ma come vengono utilizzati? Posso in qualche modo creare VS avvisi per me se provo a inviare qualcosa che è nullo lì? O è solo usato in qualche tipo di framework di test? O?
Per commentare il caso specifico, questi attributi non fanno nulla e sono solo "documentazione". Le altre risposte danno buone alternative, però. – Sander
'Nullable' è un nome migliore per' CanBeNull', solo dicendo :) –