我在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也没有解释。有人可以解释一下吗?
答案 0 :(得分:3)
is
关键字是C#模式匹配的一部分,可让您检查是否可以将变量转换为指定的类型。如果可以,则表达式的计算结果为true。
如果在表达式后指定变量名,例如
if (obj is bool variableName)
variableName
变量(在这种情况下为bool
类型)将使用obj
的值进行初始化。这样,您就可以在if语句的范围内使用类型化的变量,从而使您不必每次执行特定于类型的操作时都强制转换初始obj
变量。
答案 1 :(得分:-1)
is
语句执行检查是否可以将value
强制转换为布尔值。如果检查结果为肯定,则该值将被强制转换为变量v
。
查看更多说明: https://docs.microsoft.com/de-de/dotnet/csharp/language-reference/keywords/is
但是,我没有看到它无法编译的原因。为此,您至少必须添加来自编译器的错误消息。