Что означает этот синтаксис "if (value is bool v)"? - PullRequest
0 голосов
/ 23 июня 2019

Я нашел это в примерах HelixToolkit.WPF.SharpDX здесь :

public sealed class InverseBoolConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is bool v)
        {
            return !v;
        }
        else
        {
            return true;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is bool v)
        {
            return !v;
        }
        else
        {
            return true;
        }
    }
}

Он не компилируется, и я не могу понять этот синтаксис.У Google тоже нет объяснения.Может кто-нибудь объяснить, пожалуйста?

Ответы [ 2 ]

3 голосов
/ 23 июня 2019

Ключевое слово is является частью сопоставления с образцом в C # и позволяет вам проверить, может ли переменная быть преобразована в указанный тип. Если это возможно, выражение оценивается как истинное.

Если вы указали имя переменной после выражения, например

if (obj is bool variableName)

переменная variableName (которая в данном случае имеет тип bool) будет инициализирована с использованием значения obj. Это позволяет вам работать с типизированной переменной в области действия оператора if, избавляя вас от приведения начальной переменной obj каждый раз, когда вы хотите выполнить операцию, специфичную для типа.

Для получения дополнительной информации посмотрите это и это .

0 голосов
/ 23 июня 2019

Оператор is выполняет проверку, может ли value быть приведен к логическому значению. Если проверка положительна, значение будет преобразовано в переменную v.

Смотрите здесь для более подробного объяснения: https://docs.microsoft.com/de-de/dotnet/csharp/language-reference/keywords/is

Однако я не вижу причины, по которой он не компилируется. Для этого вам нужно добавить хотя бы сообщение об ошибке от компилятора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...