Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 这个语法是什么意思;如果(值为bool v)“;?_C#_Syntax - Fatal编程技术网

C# 这个语法是什么意思;如果(值为bool v)“;?

C# 这个语法是什么意思;如果(值为bool v)“;?,c#,syntax,C#,Syntax,我在HelixToolkit.WPF.SharpDX示例中发现了这一点: 它不能编译,我不能理解这个语法。谷歌也没有解释。有人能解释一下吗?关键字是C#模式匹配的一部分,它允许您检查变量是否可以转换为指定类型。如果可以,则表达式的计算结果为true 如果在表达式后指定变量名,如 if (obj is bool variableName) variableName变量(在本例中为bool类型)将使用obj的值初始化。这允许您在if语句的范围内使用类型化变量,从而避免您每次要执行特定于类型的操作时

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


它不能编译,我不能理解这个语法。谷歌也没有解释。有人能解释一下吗?

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

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

if (obj is bool variableName)
variableName
变量(在本例中为
bool
类型)将使用
obj
的值初始化。这允许您在if语句的范围内使用类型化变量,从而避免您每次要执行特定于类型的操作时都强制转换初始的
obj
变量


有关更多信息,请查看和。

语句执行检查
值是否可以转换为布尔值。如果检查为正,则该值将被转换到变量
v

请查看此处以了解更多说明:


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

值为bool v
如果
可转换为
bool
并将值存储在
v
中,则返回true,否则返回
false
并将
v
设置为默认值。谢谢您,一如既往,问了两秒钟后发现的。:-)问了两秒钟后就拿到了。但你赢了我。要点是你的。谢谢。不,
is
没有检查
value
是否可以转换为布尔值。您误解了
的功能。请参阅此dotnetfiddle:。请注意,类型
SomeTypeConvertibeToBool
可以强制转换为
bool
。但是,尽管
SomeTypeConvertibeToBool
对象可强制转换为
bool
,但如果变量的类型为
SomeTypeConvertibeToBool
(编译错误),则它无法与
bool
类型进行模式匹配。(1/2)(2/2)即使您删除了有问题的代码并尝试将
SomeTypeConvertibeToBool
对象填充到
object
类型的变量中,然后将
object
变量与
bool
类型进行模式匹配(基本上就是问题中的代码所做的),它也不会匹配。因为
SomeTypeConvertibeToBool
实例不是
bool
类型的值。(免责声明,由于其中所述的错误信息,我否决了您的答案。)旁注:您的链接指向的是德语文档,而不是英语文档。你可能也想解决这个问题。
if (obj is bool variableName)