2013-03-05 70 views
5

在下面的代码中,Resharper给我一个警告:Cannot cast expression of type 'Color' to type 'UIntPtr'。 (实际上,Resharper认为这是一个实际的错误。)Resharper警告将枚举枚举为UIntPtr,但没有编译器警告

但是,没有编译器警告,它工作正常。

这看起来像一个Resharper bug给我。是吗?或者编译器不担心的是它有什么坏处? (我使用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. 
     } 
    } 
} 

我能警告的值转换成一整型先走开,让我有一种变通方法:

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

最好的猜测是resharpers的问题是它可能会在运行时失败或者在平台之间出现意外的行为 – 2013-03-05 11:17:57

+0

它也可能在64位系统上导致问题。 – alzaimar 2013-03-05 14:22:10

+0

@alzaimar如何?我不明白为什么...... – 2013-03-05 14:24:37

回答

3

这看起来像一个Resharper bug给我。是吗?

Yes

RSRP-78748假的转换不存在'(UIntPtr)

using System; 

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

这是一个众所周知的规格devation。

截至2013年3月5日不固定。

+0

非常感谢 - 我试图在Resharper论坛上搜索它,但我失败... – 2013-03-05 14:33:46

相关问题