C# 错误CS0151:类型为'method group';无法转换为整型、bool、char、string、enum或可为null的类型
请帮助我在monodevelop for Unity3d上使用switch语句。我已经搜索了有关如何正确使用C# 错误CS0151:类型为'method group';无法转换为整型、bool、char、string、enum或可为null的类型,c#,switch-statement,C#,Switch Statement,请帮助我在monodevelop for Unity3d上使用switch语句。我已经搜索了有关如何正确使用switch语句的详细信息,但即使如此,我还是得到了一个关于“方法组”的错误。我还是不明白我做错了什么 接受信息检查值的我的类: public int check (int info_check) { return info_check; } void onGUI() { switch(check) { case 1:
switch
语句的详细信息,但即使如此,我还是得到了一个关于“方法组”的错误。我还是不明白我做错了什么
接受信息检查值的我的类
:
public int check (int info_check)
{
return info_check;
}
void onGUI()
{
switch(check)
{
case 1:
whatishiv();
break;
case 2:
preventhiv();
break;
default:
whatishiv();
break;
}
}
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);
}
我的类为信息检查传递值
:
public int check (int info_check)
{
return info_check;
}
void onGUI()
{
switch(check)
{
case 1:
whatishiv();
break;
case 2:
preventhiv();
break;
default:
whatishiv();
break;
}
}
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);
}
nurse_类数据库;
db=transform.GetComponent();
if(GUILayout.Button(“什么是艾滋病毒?”))
{
db.检查(1);
}
if(GUILayout.Button(“如何预防艾滋病毒?”)
{
db.检查(2);
}
检查
是一种方法。为方法声明参数时,该参数应具有与其关联的值,但您调用该方法时未向其发送参数。您应该这样称呼它:检查(整数)
:
尽管您的
check
方法是多余的,因为它除了返回它的参数之外什么都不做 检查是一种方法。为方法声明参数时,该参数应具有与其关联的值,但您调用该方法时未向其发送参数。您应该这样称呼它:检查(整数)
:
尽管您的
check
方法是多余的,因为它除了返回它的参数之外什么都不做 C#5.0规范的转换声明从$8.7.2开始
开关语句的控制类型由开关建立
表情
•如果开关表达式的类型为sbyte、byte、short、ushort,
int、uint、long、ulong、bool、char、string或枚举类型,或者
是对应于这些类型之一的可空类型,则
switch语句的控制类型
•否则,必须仅进行一次用户定义的隐式转换(§6.4)
从开关表达式的类型存在到以下类型之一
可能的管理类型:sbyte、byte、short、ushort、int、uint、long、,
ulong、char、string或,对应于以下类型之一的可空类型
那些类型
•否则,如果不存在此类隐式转换,或者如果超过
如果存在此类隐式转换,则会发生编译时错误。
但是在您的例子中,您尝试将您的方法名称放在这个表达式部分中。这就是为什么会出现这个错误
相反,您可以使用switch语句上的任何整数值调用您的方法,如
switch(check(5))
{
// your cases
}
顺便说一下,由于您的check
方法不做任何操作就返回其参数值,因此我将删除此方法并直接使用常量值调用此switch语句
switch(5)
{
// your cases
}
从$8.7.2开始,C#5.0规范的开关语句 开关语句的控制类型由开关建立 表情 •如果开关表达式的类型为sbyte、byte、short、ushort, int、uint、long、ulong、bool、char、string或枚举类型,或者 是对应于这些类型之一的可空类型,则 switch语句的控制类型 •否则,必须仅进行一次用户定义的隐式转换(§6.4) 从开关表达式的类型存在到以下类型之一 可能的管理类型:sbyte、byte、short、ushort、int、uint、long、, ulong、char、string或,对应于以下类型之一的可空类型 那些类型 •否则,如果不存在此类隐式转换,或者如果超过 如果存在此类隐式转换,则会发生编译时错误。 但是在您的例子中,您尝试将您的方法名称放在这个表达式部分中。这就是为什么会出现这个错误 相反,您可以使用switch语句上的任何整数值调用您的方法,如
switch(check(5))
{
// your cases
}
顺便说一下,由于您的check
方法不做任何操作就返回其参数值,因此我将删除此方法并直接使用常量值调用此switch语句
switch(5)
{
// your cases
}
你为什么不干脆用
void onGUI()
{
switch(info_check)
{
case 1: whatishiv();
break;
case 2: preventhiv();
break;
default:whatishiv();
break;
}
}
你为什么不干脆用
void onGUI()
{
switch(info_check)
{
case 1: whatishiv();
break;
case 2: preventhiv();
break;
default:whatishiv();
break;
}
}
我看不出你会在任何地方初始化检查变量。你是什么意思?我应该使用“public int check=0”吗?你的check方法除了返回它的参数外,什么都不做!?我看不出你会在任何地方初始化检查变量。你是什么意思?我应该使用“public int check=0”吗?你的check方法除了返回它的参数外,什么都不做!?