在 C# 5.0 中检查类型,就像在 C# 7.0 中一样

Check type in C# 5.0 as in C# 7.0

我正在关注 this tutorial,并且在 16:16 它使用以下条件检查,据我所知,这是在 C# 7.0 中执行此操作的一种方法。

if(Application.Current.MainWindow is MainWindow mainWindow)
{
    mainWindow.Start_Btn.Ischecked = false;
}

我的问题是如何使用 C# 5.0 执行相同的操作。

我试过在 if 语句之前声明一个类型的变量,但没有结果,老实说,我不太清楚该怎么做。

MainWindow mw;
        
if(Application.Current.MainWindow is mw)
{
    mw.Start_Btn.Ischecked = false;
}

编辑:我已经检查了文档 (here and here),但它都指的是 C# 7.0,我正在尝试在 5.0 中进行,因为我目前有一些限制。


另一个编辑: 同样的结果可以通过

获得
var window = (MainWindow)Application.Current.MainWindow;
window.Start_Btn.IsChecked = false;
window = null;

它不会在 if 语句中使用花哨的声明模式来检查 Application.Current.MainWindow 的类型,但它确实有效。

您在教程中看到的方式是模式匹配。不幸的是,正如您所说,它是一种较新的语法。

对于旧的 C# 版本,您应该这样做:

MainWindow mw = Application.Current.MainWindow as MainWindow;
        
if (mw != null)
{
    mw.Start_Btn.Ischecked = false;
}

有了这个,您正在尝试将 Application.Current.MainWindow 作为 MainWindow。如果它是 MainWindow 类型,mw 变量将在其中包含对象 Application.Current.MainWindow(当然是它的引用)。否则,mw 变量将为空。这就是空检查起作用的原因。

实际上,这种模式在用 C# 编写的旧应用程序中非常常见,因此 Microsoft 添加了模式匹配语法来缩短它并使其更具可读性。

更多信息:Pattern matching overview