Проблема с оператором в C # - PullRequest
2 голосов
/ 25 августа 2011

Я конвертирую код VB в C #

В библиотеке telerik есть перечисление:

namespace Telerik.Windows.Controls
{
    // Summary:
    //     Provides flags for enumerating the ViewModes supported by Telerik.Windows.Controls.RadScheduler.
    [Flags]
    public enum AvailableViewModes
    {
        // Summary:
        //     Enables Day view.
        Day = 1,
        //
        // Summary:
        //     Enables Week view.
        Week = 2,
        //
        // Summary:
        //     Enables Month view.
        Month = 4,
        //
        // Summary:
        //     Enables Timeline view.
        Timeline = 8,
        //
        // Summary:
        //     Enables All views.
        All = 15,
    }
}

и код в vb

cal.AvailableViewModes = cal.AvailableViewModes And Not AvailableViewModes.All

Конвертер возвращает меня

cal.AvailableViewModes = cal.AvailableViewModes & !AvailableViewModes.All

и это не правильно, потому что не может применить оператор! операнд этого перечисления.

Ответы [ 3 ]

7 голосов
/ 25 августа 2011

Используйте оператор ~, чтобы перевернуть биты.

4 голосов
/ 25 августа 2011

Битовый оператор not равен ~.

3 голосов
/ 25 августа 2011

Попробуйте следующее вместо

cal.AvailableViewModes = cal.AvailableViewModes & (~AvailableViewModes.All)

Конвертер имеет проблему здесь, потому что Not в VB.Net имеет две цели: логическое и битовое. Какая версия используется, зависит от типа целевого выражения. Поскольку Not используется для числового значения в коде VB.Net, оно фактически использует побитовую версию. В C # оператор ~ является эквивалентом.

...