错误CS0151:类型`方法组'的切换表达式无法转换为整数类型,bool,char,string,enum或nullable类型

时间:2015-12-28 08:08:41

标签: c# switch-statement

请帮我在Unity3d的monodevelop上使用switch语句。我已经搜索了有关如何正确使用switch语句的详细信息,但即使这样,我也会收到关于'方法组的错误消息。我仍然无法得到我做错的事。

我接受info_check的值的课程:

public int check (int info_check)
{
    return info_check;  
}

void onGUI()
{
    switch(check)
    {
        case 1: 
            whatishiv();
            break;
        case 2:
            preventhiv(); 
            break;
        default:
            whatishiv();
            break;
    }
}

我的班级传递info_check的值:

nurse_class db;
db = transform.GetComponent<nurse_class> ();
if(GUILayout.Button ("What is HIV?"))
{
    db.check(1);
}
if(GUILayout.Button ("How to prevent HIV?"))
{
    db.check(2);
}

3 个答案:

答案 0 :(得分:3)

check是一种方法。为方法声明参数时,该参数应具有与之关联的值,但您调用该方法时不向其发送参数。您应该这样称呼它:check(an integer number)

void onGUI()
{
   switch(check(1))
   {
      case 1: 
          whatishiv();
          break;
      case 2: 
          preventhiv(); 
          break;
      default:
          whatishiv();
          break;
   }
}

虽然你的check方法是多余的,因为它除了返回参数外没有做任何事情!

答案 1 :(得分:1)

来自$ 8.7.2 C#5.0规范的开关声明;

  

switch语句的管理类型由交换机建立   表达。

     

•如果switch表达式的类型是sbyte,byte,short,ushort,   int,uint,long,ulong,bool,char,string或enum-type,或者如果它   是可以为这些类型之一的可空类型,那就是   switch语句的控制类型。

     

•否则,只需要一个用户定义的隐式转换(第6.4节)   从switch表达式的类型到以下之一   可能的管理类型:sbyte,byte,short,ushort,int,uint,long,   ulong,char,string或者,对应于其中一个的可空类型   那些类型。

     

否则,如果不存在此类隐式转换,或者如果不存在   存在一个这样的隐式转换,发生编译时错误。

但在您的情况下,您尝试只是将您的方法名称放在此表达式部分中。这就是你得到这个错误的原因。

而不是那样,你可以在switch语句中使用任何整数值调用你的方法,如;

switch(check(5))
{
    // your cases
}

顺便说一句,由于你的check方法返回它的参数值而不做任何,我会删除这个方法并直接用常量值调用这个switch语句。

switch(5)
{
    // your cases
}

答案 2 :(得分:0)

为什么不简单地使用

fflush(stdin)