2015-11-12 2 views
4

Я пытаюсь создать оператор 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().

+0

Вы уверены, что это код _identical_ two character? Любые пробелы после него и т. Д., Возможно? –

+0

Каково точное значение 'pieceType' во время выполнения? Операторы 'switch' могут использовать строки без каких-либо проблем. – David

+0

Какая тип, переменная e является типом? Может быть, вам нужен кусокType.ToString() – jdweng

ответ

1

Проблема заключается в том, что я предположил, что GameObject piece вернет только 3 символьное имя, присвоенное ему в Unity. Таким образом, я предположил, что для того, чтобы получить первые 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 and Queens на B|Wk и B|Wq соответственно, используя чувствительность к регистру.

+0

Откуда вы знаете, является ли это королем или королевой, если вы используете 'Substring (0,2)'? – sab669

+1

Я изменил их коды. Теперь в ответе. –

+0

Ну, рад, что вы смогли заставить его работать – sab669

Смежные вопросы