5

一部の VB.net コードを C# に変換しようとしています。私は SharpDevelop を使って大変な作業を行いました。しかし、生成されたコードは一部の列挙操作で壊れており、手動で修正する方法がわかりません。

元の 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# コード:

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;

Resharper は[Flags]、列挙型に属性を追加することを提案します。しかし、そうしてもエラーには影響しません。

4

1 に答える 1

11

VBNotでは、論理およびビット単位の NOT の両方に使用されます。

C#!ではブール値の NOT で~あり、ビット単位の NOT です。

したがって、次を使用してください:

mPlacement = (mPlacement & ~ePlacement.Left) | ePlacement.Right;
于 2012-11-07T18:33:06.370 に答える