2013-03-05 8 views
5

Im folgenden Code gibt Resharper mir eine Warnung: Cannot cast expression of type 'Color' to type 'UIntPtr'. (Tatsächlich denkt Resharper, dass es ein tatsächlicher Fehler ist.)Resharper Warnung Casting Enum zu UIntPtr, aber keine Compiler-Warnung

Jedoch gibt es keine Compilerwarnung und es funktioniert gut.

Das sieht für mich wie ein Resharper-Fehler aus. Ist es? Oder gibt es etwas Schlechtes daran, worüber sich der Compiler keine Sorgen macht? (Ich verwende 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. 
     } 
    } 
} 

ich die Warnung gehen machen kann weg, indem der Wert in einen int ersten Casting, so habe ich eine Abhilfe:

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

Die beste Vermutung ist, dass Nachschärfer Probleme ist, dass es zur Laufzeit fehlschlagen oder unerwartet zwischen den Plattformen –

+0

Es kann auch Probleme auf 64-Bit-Systemen verursachen. – alzaimar

+0

@alzaimar Wie? Ich kann nicht sehen, warum ... –

Antwort

3

Das sieht wie ein Resharper-Bug für mich. Ist es?

Yes:

RSRP-78748 False 'Umwandlung existiert nicht' (UIntPtr)

using System; 

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

Es ist eine bekannte spec Devation.

Nicht festgelegt seit 2013-03-05.

+0

Vielen Dank - Ich habe versucht, es auf den Resharper Foren zu suchen, aber ich gescheitert... –