gpt4 book ai didi

c# - C# 中是否还有另一个 "is"运算符?

转载 作者:行者123 更新时间:2023-12-03 14:13:37 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why does is operator behave like == operator?

(3 个回答)



Using "is" keyword with "null" keyword c# 7.0

(2 个回答)


去年关闭。




我正在教我的学生如何编写函数。我使用了一个简单的算法来确定一个 char 值是否是一个实际的字母(而不是一个数字或其他东西)。
所以我实际上输入了我学生所说的话(故意装傻):“如果(字母是'A'){...}”
令我惊讶的是,这并没有导致编译器错误。我为 'B' 和 'C' 添加了相同的检查,我的程序现在可以确定 A、B 和 C 确实是字母。
为什么这样做?我到底在比较什么?
我没有积极使用类型比较,这是互联网不断出现的。
我用其他值做了一个额外的实验:

 char l = 'A';
if (l is 'A')
{
Console.WriteLine("l 'A'...");
}
if (l is "A")
{
// Doesn't compile.
}

int x = 15;
if (x is 15)
{
Console.WriteLine("X is 15.");
}
if (x is 5.6)
{
// Also doesn't compile.
}
据我所知,“is”函数是相等 (==) 运算符的扩展版本,它也强制执行相同的类型。但我找不到任何关于它的文档。

最佳答案

is可能有两种含义,具体取决于您使用的 C# 版本。
在旧的 C# 版本中,is是“isassignable to”或“isassignable from”的缩写,取决于你如何在头脑中阅读代码。它不适用于您类(class)中的代码,因为它需要 类型 在右侧,但为了完整起见,我将其包含在此处。它也可用作高效且可移植的空检查,即 variable is object是更好的书写方式 variable != null 1.
在较新的 C# 版本中,is也可用于 pattern matching .这是在 C# 72 和 extended in C# 8 中引入的。 ,还有更多的 9。具体来说,问题中的代码创建了一个 Constant Pattern expression .
这是查看这项工作的另一种有趣方式。在 C# 9 中,而不是像这样编写支票:

if (!string.IsNullOrEmpty(mystring))
你可以改为 write3
if (mystring is {Length:>0})
这很好,因为它更短,您可以提出一个消除否定的论点,使其更容易理解。 4
  • 至少,according to one of the developers on the C# team at Microsoft .但他会知道什么?他只 build 了那个东西。
  • 真的,C# 6 如果你算的话 exception filters .
  • Jared Parsons again .
  • 我会拒绝这个论点,理由是消除否定的任何 yield 都小于我们验证 null 的方式中引入的微妙之处。但是你可以试试这个论点 ;) 在有人问之前,我现在不知道这两个选项的表现如何。
  • 关于c# - C# 中是否还有另一个 "is"运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63923214/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com