我正在尝试基于两个字符的字符串创建一个switch语句。但是,这似乎不起作用,并始终评估为默认值。那么,有人可以告诉我正确的方法吗?
这是我的(可能不正确的)代码:
string GetPieceCode(GameObject piece)
{
string pieceCode = "";
Debug.Log(piece.gameObject);
pieceCode = piece.ToString().Remove(2,2);
Debug.Log(pieceCode);
return pieceCode;
}
Debug.Log(pieceType);
switch (pieceType)
{
case "BP":
Debug.Log("Black Pawn Selected");
break;
case "WP":
Debug.Log("White Pawn Selected");
break;
case "WB":
print("White Bishop Selected");
break;
case "BB":
print("Black Bishop Selected");
break;
case "WK":
print("White Knight Selected");
break;
case "BK":
print("Black Knight Selected");
break;
case "WR":
print("White Roook Selected");
break;
case "BR":
print("Black Rook Selected");
break;
case "WKing":
print("White King Selected");
break;
case "WQueen":
print("White Queen Selected");
break;
case "BKing":
print("Black King Selected");
break;
case "BQueen":
print("Black Queen Selected");
break;
default;
debug.log("Error");
break;
}
初始Debug.Log(pieceType)
打印出一个2字符的字符串代码,表明它与案例值匹配。所以我不知道出了什么问题。
此外,print()
和Debug.Log()
在此上下文中相同。
答案 0 :(得分:1)
问题在于我假设GameObject piece
只返回Unity中分配给它的3个字符名称。因此,我假设要获得代码的前2个,我只需删除第一个数字。
然而,我的所有调试尝试都因为我(错误地)认为BP(UnityEngine.GameObject)
作为输出只是BP
作为带有一些添加的调试信息的字符串这一事实而受到损害。
生成片段代码的正确方法是:
string GetPieceCode(GameObject piece)
{
string pieceCode = "";
Debug.Log(piece.gameObject);
pieceCode = piece.ToString().Substring(0,2);
Debug.Log(pieceCode);
return pieceCode;
}
感谢大家的帮助。
编辑:虽然不是原始问题的一部分,但我将Kings和Queens的代码分别更改为B|Wk
和B|Wq
,并使用区分大小写。