【发布时间】:2021-04-20 19:18:51
【问题描述】:
我知道 C# 中的模式匹配类似于:
if (x is TypeY y)
{
// do thing...
}
这或多或少等同于:
if (x is TypeY)
{
var y = (TypeY)x;
// do thing...
}
但是,我在编写 IntelliSense 建议的代码时发现了一些东西。 我有以下代码:
if (top is { } t)
{
// do stuff if 'top' is NOT NULL
}
本来,我以为我可以做if (top is not null t),我做不到;然后我转到if (top is int t),这是我收到这个建议的时候。
这是什么意思?它是如何工作的?我只在 switch 语句中的模式匹配方面见过它,例如:
class Point
{
public int X { get; set; }
public int Y { get; set; }
}
myPoint switch
{
{ X: var x, Y: var y } when x > y => ...,
{ X: var x, Y: var y } when x <= y => ...,
...
};
但是,即使这是相当新的,我也不太熟悉更高级的概念。这与我的问题有关吗?
【问题讨论】:
-
top is { } t与top is object t相同,其中{ }是匿名的object类型。这与我的问题有关吗?- 是的,{ X: var x, Y: var y }是匿名类型,具有两个属性X和Y。 -
这是不一样的。第一个将
t转换为与top相同的类型(但不可为空),而第二个将t转换为object。
标签: c# casting pattern-matching