在 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 添加了模式匹配语法来缩短它并使其更具可读性。
我正在关注 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 添加了模式匹配语法来缩短它并使其更具可读性。