C'è qualcuno in grado di spiegarmi questo strano comportamento?Perché dovrei circondare esplicitamente con "deselezionato"?
int i = 0x1234;
byte b1 = (byte)i;
byte b2 = (byte)0x1234; //error: const value '4660' can't convert to byte (use unchecked)
byte b3 = unchecked((byte)0x1234);
byte b4 = checked((byte)i); //throws
byte b5 = (byte)(int)0x1234; //error: same as above
NOTA: È un'applicazione vuota Console, con NO aritmetica checking abilitata (come default è). Grazie a tutti in anticipo.
EDIT: Dovevo essere abbastanza chiaro, ma non per tutti.
So che una parola non può essere inserita in un byte. Ma, per impostazione predefinita, un programma C# consente determinate operazioni "pericolose", principalmente per motivi di prestazioni.
Analogamente, è possibile sommare due interi di grandi dimensioni insieme e senza alcun overflow.
La mia meraviglia riguardava l'errore di compilazione sopra riportato: il cast b1/assegnazione è compilato, il b2 non può essere compilato. Apparentemente non c'è differenza, perché entrambi hanno Int32 con lo stesso valore.
Spero sia chiaro ora.
Non parlo C# e non so cosa significhi "checked" e "unchecked", ma so che non è possibile inserire un numero esadecimale di quattro cifre in un byte. –
Quale comportamento è 'strano' per te? Ci hai fornito ** passaggi per riprodurre ** e ** risultati effettivi **, ma non ** risultati attesi **. – AakashM