2012-06-18 3 views
2
bool myBool = true; 
byte myByte; 
  • Cette conversion exécute myByte = Convert.ToByte(myBool);
  • Cette conversion ne fonctionne pas myByte = (byte)myBool;

Pour un débutant (me): pourquoi sont ci-dessus différents?Conversion bool à l'octet

+0

Jetez un oeil ici http://stackoverflow.com/questions/9217278/converting-boolean-to-byte-in-vb-net – V4Vendetta

Répondre

6

Convert.ToByte est une méthode - il peut faire ce qu'il veut, probablement le long des lignes de:

return input ? (byte) 1 : (byte) 0; 

Un casting est une opération niveau de langue. Il exige que la langue soit au courant de la conversion elle-même, ou que l'un des types impliqués ait une conversion définie par l'utilisateur avec les bons types d'entrée et de sortie. Aucun de ces cas est le cas lors de la conversion de bool à byte.

Fondamentalement, le langage ne définit pas ce que cette distribution devrait signifier, donc le compilateur l'interdit.

+1

Pourquoi avez-vous besoin de lancer le 1/0 à 'byte'? En fait ILSpy dit que 'ToByte' est implémenté de la manière suivante:' if (! Value) \t { \t \t return 0; Return 0; ' –

+0

@TimSchmelter: Dans le cas contraire, le type de l'expression serait' int', il n'a donc pas pu être retourné. Cela n'a cependant pas d'importance - ces implémentations sont équivalentes. –

+0

Je me demandais juste pourquoi cela fonctionne sans cast (quand le type de retour est 'byte'), mais je suppose que la raison en est qu'un' int' peut être converti en 'byte'implicitement. (http://msdn.microsoft.com/en-us/library/5bdb6693%28v=vs.100%29.aspx). –

Questions connexes