if和else if的问题,c#

if和else if的问题,c#,c#,if-statement,C#,If Statement,我正试图制作一个程序,将日语字符转换成英语字符,但我有一个奇怪的问题,我不知道如何解决它,我确实找到了它的原因 我正在使用一个数据集,我正在使用这个代码来转换字符 我的问题是它不想转换某些字符,它不想转换的字符基于我在这里设置的: // Sets fromtype to the type the character(s) currently is/are string fromtype = ""; if (CharacterTable.Select("Romaji like '%" + char

我正试图制作一个程序,将日语字符转换成英语字符,但我有一个奇怪的问题,我不知道如何解决它,我确实找到了它的原因

我正在使用一个数据集,我正在使用这个代码来转换字符

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

// 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";
}
如果我把每一行都改成“如果”,那么它就不想识别罗马字符,如果我现在把它改成“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;

你需要考虑如果一个字符匹配多个类型会发生什么。无论

if
if else
,您都有可能从type中选择一个数据库中没有匹配结果的


您可以考虑某种类型的评分机制,在其中查询每种类型,如果字符与多个类型匹配,则考虑哪些类型有可用的替换项。

< p>您假定DATABATION.SECTUTE()在没有匹配时返回空值。它不返回,它返回一个空数组。您的测试应该如下所示:

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

看来你解决了自己的问题。剩下的问题是什么,如果有的话?剩下的问题是,无论我是否使用if或else if,总会有一些东西无法转换,我太愚蠢了,无法理解为什么你使用所有if,那么你很可能会因为落入另一个if而覆盖你在第一个if中找到的值,在这个if中,你还为“fromtype”设置了值。我不太熟悉您正在使用的这个字符表,但我也怀疑您可能会得到更准确的结果,只需使用三个数组或罗马吉、平假名和片假名列表,并循环遍历每个数组,以确定传递的字符位于哪个数组中,并使用确定的==而不是“like”。应该没有性能问题,因为这些数组或列表会很小。不,我不这么认为,因为每个字符在整个数据库中只出现一次,所以它不像是出现在多行中。好的,谢谢,如果我找不到答案,我会考虑的。我对这一点还是很陌生,所以我只是使用了我找到的第一个选项。@CptSupermrkt同样,我对这一点不太了解,但我认为这会导致性能问题,如果人们写了一篇长的文本,它必须通过一个列表来循环每个字符,列表中会有几千个字符。这是不可能的,它是每个字符的,所以,在另一个函数中,我已经编写了一些东西,例如,当一个日语字符包含多个英语字母时,它会对其进行过滤(例如,它会将“ta”作为字符发送到此函数,并以这种方式进行转换)