Se due operandi sono di diversi tipi di dati, il risultato di un'espressione aritmetica sarà del tipo di dati che è più preciso.
Da UInt64.MaxValue
è maggiore Int32.MaxValue
aggiungendo UInt64
valore a un valore Int32
produce un Decimal
(vedi: Widening and Narrowing Conversions) non un Int32
quale intervallo è troppo piccolo rispetto al UInt64
. Il risultato potrebbe anche essere negativo, quindi UInt64
non è una buona alternativa. In realtà non c'è conversione implicita da UInt64
a qualsiasi altro tipo integrale, nemmeno Int64
(Long
) essendo di intervallo è più piccolo.
Ecco perché si ottiene l'errore del compilatore se si tenta di riassegnare il risultato al UInt64
vaue.
hai per lanciarla:
myULong = CULng(myULong + 1)
o (meglio) utilizzare 1UL
, in primo luogo:
myULong += 1UL
MSDN:
conversioni di tipo-non sicuro, causa un errore del compilatore con Option Strict On. Ad esempio, se si tenta di aggiungere una variabile Integer a una variabile Double e assegnare il valore a una variabile Integer, un errore del compilatore , poiché una variabile Double non può essere convertita implicitamente in tipo Integer.
A proposito, C# utilizzerà automaticamente il tipo corretto, quindi questo compila:
UInt64 myULong = 1;
myULong += 1; // here 1 is treated as UInt64
mentre questo non verrà compilato
myULong += -1; // -1 is Int32
fonte
2014-08-30 21:35:14
Storia, Visual Basic ha un sacco di esso . Dovrai usare '1UL' qui. –
dovresti usare i letterali per rappresentare il tipo di dati corretto, 1UL, lo faccio sempre in ogni operazione matematica o dichiarazione di variabile anche per interi, i letterali numerici sono una pratica codifica personalizzata. – ElektroStudios
E ancora una volta "Option Strict On" ha salvato il giorno. –