c# – 为什么nullable上的模式匹配会导致语法错误?

c# – 为什么nullable上的模式匹配会导致语法错误?,第1张

概述我喜欢在可空的int上使用模式匹配,即int?: int t = 42;object tobj = t; if (tobj is int? i){ System.Console.WriteLine($"It is a nullable int of value {i}");} 但是,这会导致以下语法错误: > CS1003: Syntax error, ‘;’, > CS1 我喜欢在可空的int上使用模式匹配,即int?:
int t  = 42;object tobj = t;    if (tobj is int? i){    System.Console.Writeline($"It is a nullable int of value {i}");}

但是,这会导致以下语法错误:

> CS1003: Syntax error,‘;’,
> CS1525: Invalid expression term ‘)’,
> CS0103: The name ‘i’ does not exist in the current context

‘i)’标有红色波浪线.

使用旧运算符时表达式编译为:

int t = 42;object tobj = t;    if (tobj is int?){    System.Console.Writeline($"It is a nullable int");}string t = "fourty two";object tobj = t;if (tobj is string s){    System.Console.Writeline($@"It is a string of value ""{s}"".");}

也按预期工作.

(我正在使用c#-7.2并使用.net-4.7.1和.net-4.6.1进行测试)

我认为它与运算符优先级有关.因此,我尝试在几个地方使用括号,但这没有帮助.

为什么会出现这些语法错误,如何避免这些错误呢?

解决方法 各种形式的类型模式:x是T y,case T y等,always fails to match when x is null.这是因为 null doesn’t have a type,所以问“这是这种类型的null吗?”是一个毫无意义的问题.

因此t是int? i或t是Nullable< int>我作为一个模式没有任何意义:要么t是一个int,在这种情况下t是int我会匹配,或者它是null,在这种情况下没有类型模式可以导致匹配.

那就是t为int的原因? i或t是Nullable< int>我不是,也可能永远不会得到编译器的支持.

使用t时从编译器获得其他错误的原因是int?我是因为,例如,t是int? “它是一个int”:“这里没有int”是有效的语法,因此编译器对你的使用尝试感到困惑?对于这种情况下的可空类型.

至于如何避免它们,明显(尽管可能不是很有帮助)的答案是:不要使用可空类型作为类型模式中的类型.更有用的答案需要您解释为什么要尝试这样做.

总结

以上是内存溢出为你收集整理的c# – 为什么nullable上的模式匹配会导致语法错误?全部内容,希望文章能够帮你解决c# – 为什么nullable上的模式匹配会导致语法错误?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1245104.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存