Pourquoi ne pas null false?

Quelle est la raison null n'est pas évalué à false dans des conditions?

J'ai d'abord pensé à des affectations pour éviter le bug de l'aide = au lieu de ==, mais cela pourrait facilement être rejetée par le compilateur.

if (someClass = someValue) //cannot convert someClass to bool. Ok, nice

if (someClass) //Cannot convert someClass to bool. Why?

if (someClass != null) //More readable?

Je pense que c'est assez raisonnable de supposer que null signifie false. Il y a d'autres langues que l'utilisation trop, et je n'ai pas eu un bug à cause de cela.

Edit: Et je suis sûr référence à des types référence.

Un bon commentaire par Daniel Earwicker sur la cession de bug... Cette compile sans un avertissement parce qu'il évalue à bool:

bool bool1 = false, bool2 = true;
if (bool1 = bool2)
{
    //oops... false == true, and bool1 became true...
}
  • La réponse est simple: "c'est ainsi Que le C# concepteurs voulaient." Pourtant, ce n'est pas vraiment répondre à la question. Quelqu'un aurait-il aperçu des raisons pour lesquelles la langue, les designers n'aiment pas automatiquement casting des références à des valeurs booléennes (comme le C/C++/Python)?
  • Je suis en train de traquer une référence - je crois que j'ai de parler à l'un de la langue équipe a tout à l'arrière, ce qui n'aide pas vraiment
  • Je pense que C les programmeurs pense qu'il est raisonnable que, null false. Le faux est une valeur, la valeur null est l'absence de valeur. C# est bon je pense. D'autres langues qui ont été construites sans type booléen ou un concept d'un pointeur (ou type nullable) juste surchargé int dire toutes ces choses différentes. Pourquoi devrait-NULL==faux et faux==0 ? Ils ne devraient pas.
InformationsquelleAutor simendsjo | 2010-07-07