此语法是什么意思“如果(值是bool v)”?

时间:2019-06-23 15:13:49

标签: c# syntax

我在HelixToolkit.WPF.SharpDX示例here中发现了这一点:

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 个答案:

答案 0 :(得分:3)

is关键字是C#模式匹配的一部分,可让您检查是否可以将变量转换为指定的类型。如果可以,则表达式的计算结果为true。

如果在表达式后指定变量名,例如

if (obj is bool variableName)

variableName变量(在这种情况下为bool类型)将使用obj的值进行初始化。这样,您就可以在if语句的范围内使用类型化的变量,从而使您不必每次执行特定于类型的操作时都强制转换初始obj变量。

有关更多信息,请查看thisthis

答案 1 :(得分:-1)

is语句执行检查是否可以将value强制转换为布尔值。如果检查结果为肯定,则该值将被强制转换为变量v

查看更多说明: https://docs.microsoft.com/de-de/dotnet/csharp/language-reference/keywords/is

但是,我没有看到它无法编译的原因。为此,您至少必须添加来自编译器的错误消息。