2010-03-02 2 views
0

Je travaille actuellement avec une librairie et j'ai remarqué quelque chose de bizarre quand j'utilisais des fonctions que j'avais déjà faites (où je devais faire du casting).Pourquoi utiliser Nullable lorsque le type peut déjà être assigné Null?

La bibliothèque avait une fonction définie comme

public DateTime? GetDate(){..} 

Quel est le point de tout cela? Pourquoi ne pas en faire un DateTime normal et retourner null comme d'habitude s'il y a une erreur pour obtenir la date? Est-ce que je manque quelque chose de significatif sur les types Nullable?

+5

DateTime n'est pas une structure .NET? ce qui signifie que c'est un type de valeur? –

+1

omg. Oui, votre droite. Je suis bête .. quelqu'un peut soit fermer ceci ou me donner une réponse en me disant que je suis stupide. – Earlz

+0

Oui, pour une raison quelconque, je n'avais pas encore découvert que DateTime est un type de valeur .. Je n'ai jamais eu une raison d'attribuer Null à un DateTime je suppose .. – Earlz

Répondre

10

Parce que DateTime est un type de valeur .NET. Tout comme int et char, il ne peut pas être nul.

0

Les types de valeur ne peuvent pas être Nuls. Un Nullable (souvent écrit DateTime?) peut avoir une valeur null. Cela est également vrai pour tous les types de valeur. Si vous souhaitez qu'une variable contienne un nombre entier valide ou nul, vous devez déclarer un type de valeur Int32?

Vous ne pouvez pas avoir de chaîne Nullable. Je le mentionne parce que bien que les chaînes soient des types de référence, elles se comportent comme des types de valeur de plusieurs façons; J'ai été des gens essayent de déclarer Nullable. (Ok, je l'admets, c'était moi.)

1

DateTime est un type de valeur. Il ne peut pas avoir une valeur null.

Éditer: Si vous essayez d'utiliser le? opérateur sur un type de référence, vous obtenez l'erreur suivante:

The type 'object' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'System.Nullable'

0

DateTime est une structure et donc une annulable valide parce qu'il est un type de valeur. Mais vous avez raison, on ne peut pas rendre les types de référence nullables parce qu'ils peuvent déjà être assignés à null.

0

Tous les types ne sont pas des types de référence. Par exemple, vous ne pouvez pas faire quelque chose comme

int x = null; 

parce int est le type de valeur. DateTime est le type de valeur.

0

"Pourquoi ne pas simplement faire un DateTime régulier et retour null"

DateTime ne peut pas être nulle.

Questions connexes