2012-01-22 4 views
0

Я пытаюсь создать программу, которая преобразует японские символы в символы английского языка, но у меня есть странная проблема, и я не могу понять, как ее решить, я выяснил, что вызвало это хоть.Проблемы с if и else if, C#

Я использую набор данных, и я использую этот код, чтобы преобразовать символы

Моя проблема заключается в том, что она не хочет, чтобы преобразовать некоторые символы и символы, что не хочет, чтобы преобразовать в основанный на том, что я установил здесь:

// Sets fromtype to the type the character(s) currently is/are 
string fromtype = ""; 
if (CharacterTable.Select("Romaji like '%" + character + "%'") != null) 
{ 
    fromtype = "Romaji"; 
} 
else if (CharacterTable.Select("Hiragana like '%" + character + "%'") != null) 
{ 
    fromtype = "Hiragana"; 
} 
else if (CharacterTable.Select("Katakana like '%" + character + "%'") != null) 
{ 
    fromtype = "Katakana"; 
} 

Если изменить каждую отдельную строку «если», то он не хочет признавать ромадзи символы, если я установить его на «иначе если» как сейчас, это видит.

Вот полный код:

DataSet CharacterDatabase = new DataSet(); 
DataTable CharacterTable = CharacterDatabase.Tables.Add(); 

//-- Add columns to the data table 
CharacterTable.Columns.Add("Romaji", typeof(string)); 
CharacterTable.Columns.Add("Hiragana", typeof(string)); 
CharacterTable.Columns.Add("Katakana", typeof(string)); 

//-- Add rows to the data table 
CharacterTable.Rows.Add("a", "?", "?"); 

// Sets fromtype to the type the character(s) currently is/are 
string fromtype = ""; 
if (CharacterTable.Select("Romaji like '%" + character + "%'") != null) 
{ 
    fromtype = "Romaji"; 
} 
else if (CharacterTable.Select("Hiragana like '%" + character + "%'") != null) 
{ 
    fromtype = "Hiragana"; 
} 
else if (CharacterTable.Select("Katakana like '%" + character + "%'") != null) 
{ 
    fromtype = "Katakana"; 
} 

// generates a new variable to store the return in 
DataRow[] filteredRows = CharacterTable.Select(fromtype + " like '%" + character + "%'"); 

// Return the converted character in the requested type 
foreach (DataRow row in filteredRows) 
{ 
    if (RequestedCharType == 1) 
    { 
     return row["Romaji"].ToString(); 
    } 
    if (RequestedCharType == 2) 
    { 
     return row["Hiragana"].ToString(); 
    } 
    if (RequestedCharType == 3) 
    { 
     return row["Katakana"].ToString(); 
    } 
} 

// if it couldn't find the character, return the original character 
return character; 
+3

Кажется, вы решили свой собственный вопрос. Какая остальная проблема, если таковая имеется? – ziesemer

+0

Оставшаяся проблема заключается в том, что я использую, если или нет, если всегда есть что-то, что не конвертируется, и я слишком глуп, чтобы понять, почему – user1071461

+1

Если вы используете все Ifs, то вы, вероятно, переписываете значение, которое вы найдите в своем первом случае, если попав в другое. Если вы также установили значение для «fromtype». Я не слишком хорошо знаком с этим CharacterTable, который вы используете, но я также подозреваю, что вы можете получить более точные результаты, просто имея три массива или списки romaji, hiragana и katakana и пробираясь каждый, чтобы узнать, какой массив прошел символ находится с окончательным ==, а не «как». Не должно быть проблем с производительностью, из-за того, насколько малы эти массивы или списки. – CptSupermrkt

ответ

0

Вы должны рассмотреть, что происходит, если символ совпадает с несколькими типами. Возможно, что независимо от if или if else вы выбираете fromtype, который не имеет соответствующего результата в базе данных.

Вы можете рассмотреть какой-то механизм подсчета очков, в котором вы запрашиваете каждый тип, и если символ соответствует нескольким типам, вы принимаете во внимание, какие типы имеют доступные замены.

+0

Он не должен быть способен, это символ на символ, поэтому, и в другой функции я уже написал что-то, что фильтрует его, когда японский символ содержит несколько английских букв, например (он отправит, например, «ta» в качестве символа к этой функции и преобразовать ее таким образом) – user1071461

0

Вы предполагаете, что DataTable.Select() возвращает null, когда нет совпадения. Это не так, он возвращает пустой массив. Ваш тест должен выглядеть так:

if (CharacterTable.Select("blabla").Length > 0) { // etc.. }