if和else if,c#的问题

时间:2012-01-22 08:23:39

标签: c# if-statement

我正在尝试制作一个将日文字符转换成英文字符的程序,但我有一个奇怪的问题,我无法弄清楚如何解决它,我确实找到了导致它的原因。

我正在使用数据集,我正在使用此代码转换字符

我的问题是它不想转换某些字符,而且它不想转换的字符是基于我在这里设置的:

// 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";
}

如果我将每一行改为“if”,那么它不想识别romaji字符,如果我现在将其设置为“else if”,它会看到。

以下是完整代码:

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;

2 个答案:

答案 0 :(得分:0)

如果角色匹配多种类型,您需要考虑会发生什么。无论ifif else如何,您都可以选择在数据库中没有匹配结果的fromtype

你可以考虑某种评分机制,在那里查询每种类型,如果字符匹配多种类型,你可以考虑哪些类型有可用的替换。

答案 1 :(得分:0)

您认为DataTable.Select()在没有匹配时返回null。它没有,它返回一个空数组。您的测试应该如下所示:

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