2013-03-05 6 views
5

Nel seguente codice, Resharper mi avvisa: Cannot cast expression of type 'Color' to type 'UIntPtr'. (In realtà, Resharper pensa che si tratti di un errore effettivo.)Rilevazione enunciato di rilubazione enum su UIntPtr, ma nessun avvertimento del compilatore

Tuttavia, non vi è alcun avvertimento del compilatore e funziona correttamente.

Questo mi sembra un bug Resharper. È? O c'è qualcosa di negativo che il compilatore non si preoccupa? (Sto usando ReSharper 7.1.1)

using System; 

namespace Demo 
{ 
    internal class Program 
    { 
     public enum Color { Red, Green, Blue } 

     private static void Main(string[] args) 
     { 
      UIntPtr test = (UIntPtr) Color.Red; // Resharper warning, no compile warning. 
     } 
    } 
} 

posso fare l'avvertimento andare via dal casting del valore di un int prima, quindi ho una soluzione:

UIntPtr test = (UIntPtr)(int) Color.Red; 
+1

La migliore ipotesi è che i problemi del ricondizionatore sono che potrebbe non riuscire in fase di runtime o comportarsi in modo imprevisto tra le piattaforme. –

+0

Potrebbe anche causare problemi sui sistemi a 64 bit. – alzaimar

+0

@alzaimar Come? Non riesco a capire perché ... –

risposta

3

questo sembra come un bug di Resharper per me. È?

Yes:

RSRP-78.748 False 'conversione non esiste' (UIntPtr)

using System; 

class A 
{ 
    static void Main() 
    { 
     E? x = 0; 
     UIntPtr z = (UIntPtr)x; 
    } 
} 
enum E { } 

Si tratta di un noto Devation spec.

Non corretto dal 2013-03-05.

+0

Grazie mille - ho provato a cercarlo sui forum di Resharper, ma io fallito ... –