【问题标题】:c# Switch case not workingc#switch case不工作
【发布时间】:2017-12-08 16:59:32
【问题描述】:

我正在尝试使用switch 来检查一个值:

private void btnInput1Rste_Click(object sender, EventArgs e)
{
    switch (sender == btnInput1Rste)
    {
        case "1": currentButtonPressedRste = 1;
            break;
    }
}

报错如下:

can't convert type 'string' to 'bool'

但是,当我尝试将其转换为布尔值时,它会说:

a constant value is expected.

我该如何解决?

当它工作时,它应该检查 3 个值。 (不仅仅是这个switch

【问题讨论】:

  • C# Basics Tutorial 领域有一些非常好的在线教程我建议你开始做一些补救阅读
  • 当有人点击您的btnInput1Rste 按钮时会发生什么?我几乎 100% 确定 switch 应该是事件逻辑的一部分,而不是确定 sender 是否是您的按钮。我的意思是,除了你的btnInput1RsteClick 事件之外,你真的有这个事件吗?

标签: c# switch-statement typeconverter


【解决方案1】:

sender == btnInput1Rste 是一个布尔表达式;结果是truefalse。坦率地说,你可能只想要一个if/else。你可能可以case true: 做一个switch 但是......

【讨论】:

  • 我必须为学校作业使用一个开关,否则它已经与 if/else 一起使用了。但情况确实如此:有效! :) 感谢您的帮助
【解决方案2】:

你的开关格式也很奇怪我想你想看看btnInput1Rste是否等于发件人?而且你也没有默认情况。

 switch (sender)
    {
        case btnInput1Rste: 
             //This button was the sender
            break;
        default:
            break;
    }

【讨论】:

    【解决方案3】:

    这就是问题所在。无论 switch 语句括号中的类型是什么,都必须与 case 的类型相匹配。在这里,括号中有一个布尔值。您的案例正在检查字符串类型。布尔值和字符串不能隐式相互转换,因此会报错。

    【讨论】:

      【解决方案4】:

      使用 switch 的选项 1,我们假设您的 btnInput1Rste 是一个 const 字符串,例如:

          //..
          public const string btnInput1Rste= "some_value";
      
          ///...then this should work:
          switch (sender)
              {
                  case btnInput1Rste:
                      //enter code here
                      break;
              }
      

      选项 2,其中 btnInput1Rste 不必是常量字符串:

      if(sender == btnInput1Rste){
            //enter code here
      }
      

      【讨论】:

      • sender 是一个对象,你不能switch 在它上面。 if 声明会起作用,但 OP 说他们需要使用 switch
      • 没错,我没注意方法,而是switch语句。
      猜你喜欢
      • 2022-08-03
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 2020-02-26
      • 2018-10-05
      • 1970-01-01
      相关资源
      最近更新 更多