C# FormLoadEvent上的switch语句

C# FormLoadEvent上的switch语句,c#,winforms,switch-statement,C#,Winforms,Switch Statement,请问,这有什么问题: private void Form2_Load(object sender, EventArgs e) { switch (Form2.Tag) //error { case "desc": MessageBox.Show("desc"); break; case "sms": MessageBox.Show("sms"); break;

请问,这有什么问题:

private void Form2_Load(object sender, EventArgs e)
{
    switch (Form2.Tag) //error
    {
        case "desc":
            MessageBox.Show("desc");
        break;

        case "sms":
            MessageBox.Show("sms");
        break;
    }
}
错误:

An object reference is required for the non-static field, method, or property System.Windows.Forms.Control.Tag.get

你可能是想说
this.Tag
。引用
标记
属性将需要一个
Form2
的实例,因此您会收到错误消息

编辑:

忘记了标签是一个对象。将其转换为字符串,您的语句应该可以工作:

switch ((string)this.Tag)

你可能是想说
this.Tag
。引用
标记
属性将需要一个
Form2
的实例,因此您会收到错误消息

编辑:

忘记了标签是一个对象。将其转换为字符串,您的语句应该可以工作:

switch ((string)this.Tag)
您的代码应该是:

switch ((string)this.Tag) 
您的代码应该是:

switch ((string)this.Tag) 

由于
标记
不是静态属性,您将无法通过类名(即Form2)访问它。标记也是
object
类型,不能在switch语句中使用。由于您的案例属于字符串类型,您可以尝试以下操作:

 string tag = (string) this.Tag;
 switch (tag) //error
      {
           case "desc":
                MessageBox.Show("desc");
                break;
           case "sms":
                MessageBox.Show("sms");
               break;
      }    

由于
标记
不是静态属性,您将无法通过类名(即Form2)访问它。标记也是
object
类型,不能在switch语句中使用。由于您的案例属于字符串类型,您可以尝试以下操作:

 string tag = (string) this.Tag;
 switch (tag) //error
      {
           case "desc":
                MessageBox.Show("desc");
                break;
           case "sms":
                MessageBox.Show("sms");
               break;
      }    

我用这个.Tag替换了Form2.Tag,但出现了另一个错误:开关表达式或大小写标签必须是bool、char、string、integral、enum或相应的可空类型我用这个.Tag替换了Form2.Tag,并出现了另一个错误:开关表达式或大小写标签必须是bool、char、string、integral、enum或相应的可空类型请参阅“”。好的,标题中不再有标记。请参阅“”。好的,标题中不再有标记。谢谢。两种解决方案都有效。谢谢。两种解决方案都有效。