c# – 在Switch语句中使用String

我试图基于两个字符串创建一个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()在此上下文中是相同的.

最佳答案 问题在于我认为GameObject片段只返回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.

点赞