Странная проблема в C #, связанная с DataSet - PullRequest
1 голос
/ 26 января 2012

В настоящее время я работаю над программой, которая преобразует японские символы в английские и наоборот. Это не работает, хотя, в последние несколько дней я пытался все, чтобы попытаться заставить его работать, это, вероятно, небольшая глупая проблема, но я просто не могу ее найти. Я довольно новичок во всем этом, поэтому любая помощь приветствуется.

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

        string fromtype = "";

        // Determines what type the character is currently
        // && fromtype == "" added to avoid weird unexplainable errors...
        if (CharacterTable.Select("Romaji = '" + character + "'") != null && fromtype == "")
        {
            fromtype = "Romaji";
        }
        else if (CharacterTable.Select("Hiragana = '" + character + "'") != null && fromtype == "")
        {
            fromtype = "Hiragana";
        }
        else if (CharacterTable.Select("Katakana = '" + character + "'") != null && fromtype == "")
        {
            fromtype = "Katakana";
        }

Я даже пытался удалить эту функцию, которая пытается автоматически определить тип шрифта и сделать это с помощью радиокнопок, чтобы пользователь мог выбрать его, но почему-то похоже, что он делает то же самое ... Я полностью сбит с толку, любая помощь приветствуется.

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

public string CheckCharacter(string character, int RequestedCharType)
        {
            // RequestedCharType
            // 1 = Romaji
            // 2 = Hiragana
            // 3 = Katakana

            //-- Instantiate the data set and table
            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", "あ", "ア");
            CharacterTable.Rows.Add("i", "い", "イ");


            // Sets fromtype to the type the character(s) currently is/are
            string fromtype = "";

            // Determines what type the character is currently
            // && fromtype == "" added to avoid weird unexplainable errors...
            if (CharacterTable.Select("Romaji = '" + character + "'") != null && fromtype == "")
            {
                fromtype = "Romaji";
            }
            else if (CharacterTable.Select("Hiragana = '" + character + "'") != null && fromtype == "")
            {
                fromtype = "Hiragana";
            }
            else if (CharacterTable.Select("Katakana = '" + character + "'") != null && fromtype == "")
            {
                fromtype = "Katakana";
            }



           // generates a new variable to store the return in
           DataRow[] filteredRows = CharacterTable.Select(fromtype + " = '" + 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;
        }

1 Ответ

0 голосов
/ 26 января 2012

Ваша проблема в том, что вы неправильно поняли, как работает Select. Select не возвращает null, когда нет совпадений, поэтому ваш первый if всегда верен. Вместо этого вам нужно проверить, были ли какие-либо результаты, которые вы можете сделать с помощью Enumerable.Any() (добавьте using System.Linq):

if (CharacterTable.Select("Romaji = '" + character + "'").Any())
{
    fromtype = "Romaji";
}
else ...

В качестве альтернативы вы можете проверить длину массива:

if (CharacterTable.Select("Romaji = '" + character + "'").Length > 0)
{
    fromtype = "Romaji";
}
else ...
  • Я не уверен, что бит fromType == "" для этого, безусловно, не нужен.
  • Рассматривая создание типа enum для ваших типов символов.
  • Этот метод можно сделать статическим.
  • Попробуйте использовать оператор switch вместо if (RequestedCharType == 1) & c.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...