2012-01-22 24 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,平假名和片假名,并循环遍历每个数组以找出哪个数组通过了字符是在一个明确的==而不是“喜欢”。应该不是性能问题,因为这些数组或列表会有多小。 – CptSupermrkt

回答

0

你需要考虑,如果一个字符匹配多种类型会发生什么。有可能不管ifif else,您选择fromtype在数据库中没有匹配的结果。

你可以考虑某种形式的评分机制,在这里查询每个类型,如果该字符匹配多种类型的,你考虑哪些类型有可用的替代品。

+0

它不应该能够,它是每个字符的字符,所以在另一个函数中,我已经写了一些东西,例如当日文字符包含多个英文字母时它会将其过滤掉(例如,它会发送例如“ta”作为字符到这个函数并将其转换) – user1071461

0

您认为DataTable.Select()在不匹配时返回null。它不,它返回一个空数组。您的测试应该是这样的:

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