Преобразовать. ToBoolean и булевская переменная. Синтаксический анализ не принимает 0 и 1

Поскольку простой конечный автомат просто использует оператор переключения и перечислимый тип для Вашего состояния. Сделайте свои переходы в операторе переключения на основе Вашего входа. В реальной программе Вы, очевидно, изменились бы, "если (введено)" для проверки на точки перехода. Надежда это помогает.

typedef enum
{
    STATE_1 = 0,
    STATE_2,
    STATE_3
} my_state_t;

my_state_t state = STATE_1;

void foo(char input)
{
    ...
    switch(state)
    {
        case STATE_1:
            if(input)
                state = STATE_2;
            break;
        case STATE_2:
            if(input)
                state = STATE_3;
            else
                state = STATE_1;
            break;
        case STATE_3:
            ...
            break;
    }
    ...
}
65
задан Brett Allen 14 December 2009 в 22:08
поделиться

4 ответа

0 и (ненулевое значение) не равны «false» и «true», они Это просто представление, выбранное C. В других языках используется 0 для истины и -1 для false или другие схемы полностью. Логическое значение не 0 или 1, оно истинно или ложно.

Если оно также обрабатывает «да» и «нет», «выключено» и «включено», а также все мириады других вещей, аналогичных логическим? Где бы вы провели черту?

Логическое значение не 0 или 1, оно истинно или ложно.

Если оно также обрабатывает «да» и «нет», «выключено» и «включено», а также все мириады других вещей, аналогичных логическим? Где бы вы провели черту?

Логическое значение не 0 или 1, оно истинно или ложно.

Если оно также обрабатывает «да» и «нет», «выключено» и «включено», а также все мириады других вещей, аналогичных логическим? Где бы вы провели черту?

66
ответ дан 24 November 2019 в 15:23
поделиться

Что делает логические значения особенными? По сути, они равны 0 как ложь и ненулевые как истинные, по моему опыту ...

Это деталь реализации, которая совершенно не имеет отношения к делу.

true - логическое значение. false - логическое значение. Все остальное - нет.

Если вы хотите разобрать что-то такое, что строка «0» оценивает false , а все остальное оценивает true , вы можете использовать:

!mystr.Equals("0");
30
ответ дан 24 November 2019 в 15:23
поделиться

Вы хотите Convert.ToBoolean (int value) не знаете, что не так с методами анализа: -)

Код бесполезный:

        int falseInt = 0;
        int trueInt = 1;

        bool falseBool;
        bool trueBool;

        if (bool.TryParse(falseInt.ToString(), out falseBool))
        {
            if (!falseBool)
            {
                MessageBox.Show("TryParse: False");
            }
        }

        if (bool.TryParse(trueInt.ToString(), out trueBool))
        {
            if (!trueBool)
            {
                MessageBox.Show("TryParse: True");
            }
        }

        falseBool = Convert.ToBoolean(falseInt);
        trueBool = Convert.ToBoolean(trueInt);

        if (!falseBool)
        {
            MessageBox.Show("Convert: False");
        }

        if (trueBool)
        {
            MessageBox.Show("Convert: True");
        }
3
ответ дан 24 November 2019 в 15:23
поделиться

К сожалению, в .NET такое часто случается. Например, я не могу вспомнить, что это за XML-сериализатор или XmlConvert, но один из них не работает, если регистр True / False неверен.

Чтобы получить то, что хотите, вы можете пройти через целое число и обратно.

string s = "2";
int i = Convert.ToInt32(s);
bool b = Convert.ToBoolean(i);

В приведенном выше случае все, что не равно нулю, будет оцениваться как истина.

По этой причине я создал класс, который я использую повсюду, под названием ConversionStrategy, который принимает во внимание тип источника и тип назначения и выбирает наиболее идеальную (и гибкую) стратегию преобразования для преобразования.

8
ответ дан 24 November 2019 в 15:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: