2012-11-07 19 views
5

私はVB.netコードをC#に変換しようとしています。私はSharpDevelopを使って重労働をしました。生成されたコードはenum操作の一部を破っているので、手動で修正する方法がわかりません。"Not MyEnum.SomeValue"に相当する#

オリジナルVB.netコード:

Enum ePlacement 
    Left = 1 
    Right = 2 
    Top = 4 
    Bottom = 8 
    TopLeft = Top Or Left 
    TopRight = Top Or Right 
    BottomLeft = Bottom Or Left 
    BottomRight = Bottom Or Right 
End Enum 

Private mPlacement As ePlacement 

''... 

mPlacement = (mPlacement And Not ePlacement.Left) Or ePlacement.Right 

生成されるC#コード:Resharperのは、列挙に[Flags]属性を追加することを示唆している

public enum ePlacement 
{ 
    Left = 1, 
    Right = 2, 
    Top = 4, 
    Bottom = 8, 
    TopLeft = Top | Left, 
    TopRight = Top | Right, 
    BottomLeft = Bottom | Left, 
    BottomRight = Bottom | Right 
} 

private ePlacement mPlacement; 

//... 

//Generates CS0023: Operator '!' cannot be applied to operand of type 'Popup.Popup.ePlacement' 
mPlacement = (mPlacement & !ePlacement.Left) | ePlacement.Right; 

。そうしてもエラーには影響しません。

+1

でも右演算子で、あなたはまだ[フラグ]属性を持つ必要があります。 – plinth

+0

Sharpdevelopで報告されたバグ:http://community.sharpdevelop.net/forums/p/16388/44685.aspx –

答えて

10

VB Notは、論理NOTとビットNOTの両方に使用されます。

C#!では論理NOTであり、~はビットNOTです。

はそうちょうど使用:

mPlacement = (mPlacement & ~ePlacement.Left) | ePlacement.Right;