无法隐式将字符串转换为bool

时间:2017-04-29 22:38:55

标签: c#

我正在尝试在Windows窗体应用程序(可视工作室)中创建代码,该应用程序应该从文本框中获取文本并检查它是否在说出特殊的内容并执行文本框所说的操作,例如,如果它说" 1 + 1"另一个文本框(在代码中称为"输出")应该说" 2"。请检查我的代码,然后说我是初学者。我也尝试了一些像" Convert.ToBoolean(string)"但它没有用。

      private void TextEditor_TextChanged(object sender, EventArgs e)
    {
        TextEditor.Text = "";
        Convert.ToBoolean(TextEditor);

        if (TextEditor.Text = "1 + 1")
        {
            Output.Text = "2";
        }

    }

4 个答案:

答案 0 :(得分:5)

首先:我认为你不需要这一行(实际上,你甚至不使用ToBoolean的返回值)

Convert.ToBoolean(TextEditor);

其次,您会抛出一个异常,因为您无法将textBox转换为布尔值 - 您必须这样:

Convert.ToBoolean(TextEditor.Text);

但是我不认为这在这种情况下很有用,所以请不要这样做。

第三,你只使用了一个相等运算符 - 这应该是:

if (TextEditor.Text == "1 + 1")
//...

否则,您可以使用" 1 + 1"分配短信的文本。然后检查分配结果(这是分配的内容,因此在这种情况下,它" 1 + 1")是真的。显然,由于赋值是一个字符串,它不可能是真的,因此编译器会告诉您不能将字符串(" 1 + 1")转换为bool。

无论如何,如果你想写一个计算器,我不会硬编码每次计算的每一个结果。例如。另外你可以这样做:

Output.Text = TextEditor.Text.Split('+').Select(s => Convert.ToInt32(s.Trim())).Sum().ToString();

这将获取文本,将其拆分为+符号(它对于减法或其他东西是相同的),将(修剪的)操作数转换为整数并使用LINQ对它们求和。

然而,由于你的数字可能是错误的(你的评论指向类似的东西),你应该用try catch围绕这个 - 并且,因为你不想要导致错误的空输入,您可以添加RemoveEmptyEntries选项:

try
{
    Output.Text = TextEditor.Text.Split(new []{'+'}, StringSplitOptions.RemoveEmptyEntries).Select(s => Convert.ToInt32(s.Trim())).Sum().ToString();
}
catch (Exception e)
{
    Output.Text = "Wrong input!";
}

答案 1 :(得分:3)

如果需要布尔运算符,在这种情况下' ==' :)

if (TextEditor.Text == "1 + 1")

答案 2 :(得分:2)

一些事情:

    TextEditor.Text = "";

您不想这样做是因为您要清除用户输入的内容。

    Convert.ToBoolean(TextEditor);

这不是必需的,因为您不存储或使用结果。它实际上不会将TextEditor转换为布尔值“。此外,这不应该编译,它应该是TextEditor.Text

    if (TextEditor.Text = "1 + 1")

正如其他人所指出的,这是分配(而非比较),这是问题的原因。这就像说

if ("1 + 1")

这不是布尔值。

此外,正如其他人所指出的那样,你不想对此进行硬编码,因为如果人们做了什么,例如“1 + 2”?另外,如果他们输入的方式不同,例如“1 + 1”?

答案 3 :(得分:0)

看起来你正在尝试建立一个解释器。您应该查看Regular ExpressionsExpression Trees。我不会撒谎,这不是很简单,但如果你坚持下去,结果会很棒。您可以在C#之上创建自己的语言。