2010-11-01 5 views
14

Comme je comprends par défaut (objet) où 'objet' est un type de référence renvoie toujours null, mais puis-je spécifier ce qu'est un défaut? Par exemple, je veux par défaut (objet) == new object();Spécifier la valeur par défaut pour un type de référence

+1

Non, ce n'est pas possible. Pouvez-vous nous dire l'objectif final ici, c'est-à-dire pourquoi vous voudriez cette fonctionnalité? – Ani

+0

Non. Et pourquoi auriez-vous besoin de faire cela? Si l'objet est nul, attribuez-en un nouveau! –

+1

Juste pour être en mesure de dire FirstOrDefault() et ne jamais obtenir une valeur nulle. Je suppose que je vais écrire une nouvelle méthode d'extension alors. –

Répondre

25

n ° default(type) retournerez toujours la même chose - un « zéro » édité "version de ce type. Pour un type de référence, il s'agit d'un descripteur d'un objet qui est toujours défini avec la valeur zéro, ce qui correspond à null. Pour un type de valeur, il s'agit toujours de la structure avec tous les membres définis sur zéro.

Il n'existe aucun moyen de contourner ce problème - la spécification de langage est conçue de cette manière.


Edit: Quant à votre commentaire:

Juste pour pouvoir dire FirstOrDefault() et jamais une valeur nulle.

Je ne recommanderais pas cela dans tous les cas. Les utilisateurs s'attendent à FirstOrDefault() pour renvoyer null en cas d'échec. Il serait préférable d'écrire votre propre méthode d'extension:

static T FirstOrNewInstance<T>(this IEnumerable<T> sequence) where T : class, new() 
{ 
    return sequence.FirstOrDefault() ?? new T(); 
} 
3

Désolé, je ne suis pas Jon Skeet ...

Mais de toute façon, la réponse est « non vous ne pouvez pas »

+6

Normalement Jon Skeet explique pourquoi (ou pourquoi pas dans ce cas) :) – PostMan

+0

@PostMan, comme je l'ai dit, je ne suis pas Jon Skeet;). De toute façon, je ne pense pas qu'il y ait quelque chose à expliquer ici ... ce n'est tout simplement pas possible. –

+0

Fais-le juste, tout ira bien :) Mais oui, je suis d'accord, il n'y a pas d'autre explication que tu ne peux pas. (autre que la décision de conception) – PostMan

Questions connexes