如何在switch case语句中检查控件类型?
Private void CheckControl(Control ctl)
{
switch (ctl) {
case TextBox: MessageBox.Show("This is My TextBox");
break;
case Label: MessageBox.Show("This is My Label");
break;
}
}
以下是上述陈述中的错误:
“文本框”是一种类型,在给定的上下文中无效
答案 0 :(得分:14)
从C#7开始,您可以为此使用type patterns:
private void CheckControl(Control ctl)
{
switch (ctl)
{
case TextBox _:
MessageBox.Show("This is My TextBox");
break;
case Label _:
MessageBox.Show("This is My Label");
break;
}
}
此处_
是 discard 的语法,这意味着以后您无需再以TextBox
(或Label
)的形式访问该值。
如果要做要访问特定类型的成员,则可以引入模式变量:
private void CheckControl(Control ctl)
{
switch (ctl)
{
case TextBox textBox:
// Use textBox for any TextBox-specific members here
MessageBox.Show("This is My TextBox");
break;
case Label label:
// Use label for any Label-specific members here
MessageBox.Show("This is My Label");
break;
}
}
答案 1 :(得分:1)
尝试:
switch (ctl?.GetType().Name) {
case "TextBox": MessageBox.Show("This is My TextBox");
break;
case "Label": MessageBox.Show("This is My Label");
break;
}