首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不能隐式将字符串转换为bool。

不能隐式将字符串转换为bool。
EN

Stack Overflow用户
提问于 2017-04-29 22:38:55
回答 4查看 2.3K关注 0票数 2

我试图在windows窗体应用程序(visual Studio)中编写代码,该应用程序应该从文本框中接收文本,并检查它是否在说一些特殊的内容,并执行文本框所述的操作,例如,如果它说"1 + 1“,则另一个文本框(在代码中称为”输出“)应该说"2”。请检查我的代码,只是说我是一个初学者。另外,我也尝试过一些类似"Convert.ToBoolean(string)“的东西,但是它没有起作用。

代码语言:javascript
运行
复制
      private void TextEditor_TextChanged(object sender, EventArgs e)
    {
        TextEditor.Text = "";
        Convert.ToBoolean(TextEditor);

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

    }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-04-29 22:48:12

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

代码语言:javascript
运行
复制
Convert.ToBoolean(TextEditor);

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

代码语言:javascript
运行
复制
Convert.ToBoolean(TextEditor.Text);

但我不认为这在这种情况下是有用的,所以把它置之不理。

第三,您只使用了一个相等操作符--应该这样做:

代码语言:javascript
运行
复制
if (TextEditor.Text == "1 + 1")
//...

否则,您将文本指定为"1+1“,然后检查赋值结果(这是分配的结果,因此在这种情况下为"1 + 1")为真。显然,由于赋值是字符串,所以不可能为true,所以编译器告诉您不能将字符串("1 + 1")转换为bool。

不管怎么说,如果你想写一个计算器,我不会硬编码每一个计算的结果。另外,您还可以这样做:

代码语言:javascript
运行
复制
Output.Text = TextEditor.Text.Split('+').Select(s => Convert.ToInt32(s.Trim())).Sum().ToString();

这将获取文本,在+符号处将其拆分(减法或其他操作),使用LINQ将(修剪后的)操作数转换为整数并对它们进行求和。

但是,由于您的数字可能是错误的(您的评论指出了类似的情况),您应该用一个try catch包围它--而且,由于您不希望一个空输入导致错误,所以可以添加RemoveEmptyEntries选项:

代码语言:javascript
运行
复制
try
{
    Output.Text = TextEditor.Text.Split(new []{'+'}, StringSplitOptions.RemoveEmptyEntries).Select(s => Convert.ToInt32(s.Trim())).Sum().ToString();
}
catch (Exception e)
{
    Output.Text = "Wrong input!";
}
票数 5
EN

Stack Overflow用户

发布于 2017-04-29 22:40:49

如果需要布尔运算符,则在本例中为“==”:)

代码语言:javascript
运行
复制
if (TextEditor.Text == "1 + 1")
票数 3
EN

Stack Overflow用户

发布于 2017-04-29 23:12:14

有几件事:

代码语言:javascript
运行
复制
    TextEditor.Text = "";

您不想这样做,因为您正在清除用户输入的任何内容。

代码语言:javascript
运行
复制
    Convert.ToBoolean(TextEditor);

这是不需要的,因为您没有存储或使用结果。它实际上不会将TextEditor转换为布尔值“就位”。而且,这不应该编译,它应该是TextEditor.Text

代码语言:javascript
运行
复制
    if (TextEditor.Text = "1 + 1")

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

代码语言:javascript
运行
复制
if ("1 + 1")

这不是布尔型的。

而且,正如其他人所指出的,您不想硬编码这一点,因为如果人们这样做了,例如,"1 + 2“怎么办?另外,如果他们的输入方式不同,比如"1+1“呢?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43701143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档