为什么此语法在 C# 中有效?

tur*_*ete 1 c#

在我得到的 WPF 项目中,我有一个名为 IHavePassword 的类,在另一个文件中是一个像这样的按钮的侦听器

private void DoLogin(object parameter)
{
    if (parameter is IHavePassword passwordContainer)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题与“is”关键字之后的 if 语句有关,它在那里做什么?是否将方法参数与“IHavePassword”类新实例进行比较?

小智 6

您问的好问题,在 C# 中有一个称为模式匹配的概念。所以主要作者试图检查传入的参数是否与 IHavePassord 兼容。如果这是兼容的,则该变量将成为 passwordContainer。

这个指向微软文档的链接会有所帮助。

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/is

private void DoLogin(object parameter)
{
// expr (parameter) is type(IHavePassword) varname (passwordContainer)
    if (parameter is IHavePassword passwordContainer)
    {
        // if true you can now have access to passwordContainer.
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。谢谢