【问题标题】:Conversion From String to Boolean Vb.net从字符串转换为布尔值 Vb.net
【发布时间】:2018-02-27 10:02:17
【问题描述】:

我想用布尔值和二元逻辑运算符(和/或)评估字符串。 当我写Dim Expression = ((True And False) Or True) 时,“表达式”的值将是真实的。 但是,当我写 Dim Expression = "((True And False) Or True)" 并尝试使用 Convert.ToBoolean() 像 MsgBox(Convert.ToBoolean(Expression)) 一样将字符串转换为布尔值时,我收到一条错误消息:字符串未被识别为有效的布尔值。 em>picture。 以前的所有帖子都处理仅包含“True”或“False”的字符串。但我很少发现一篇文章处理包含括号和多个运算符的表达式,如“((真或假)和真)”或更复杂的表达式。 convert.ToBoolean 函数是否支持此功能,如果支持,为什么会出现此错误?

【问题讨论】:

  • 您要求它将 字符串 "((True And False) Or True)" 直接转换为布尔值。布尔值只能是TrueFalse,与它们匹配的唯一字符串是"True""False"。它不会像实际的一段代码一样评估您的字符串并计算结果,它只是将其视为字符串,因为它就是这样。而且由于它不直接匹配布尔值的字符串版本,因此您会收到错误。
  • 这里清楚地记录了:msdn.microsoft.com/en-us/library/86hw82a3(v=vs.110).aspx - “为了成功转换,值参数必须等于 Boolean.TrueString,一个值为 True 的常量,Boolean.FalseString,一个值为为 False,否则必须为空”。如果您阅读文档,它已经为您解答了您的问题。
  • 那么没有办法将这样的字符串转换为布尔值吗?
  • 不,因为它不是布尔值,它实际上是一个随机字符串。仅仅因为它看起来像代码,如果它是代码则可能评估为布尔值并不真正相关(因为它不是代码,它是一个字符串)。
  • 但是,如果您正在寻找如何将任意字符串解释为代码并执行它,这是一个更广泛的主题。您可能会感兴趣以下内容(只需通过 google 快速搜索,您可以搜索更多内容):nullskull.com/articles/20030908.aspstackoverflow.com/questions/1511376/…stackoverflow.com/questions/4629/…

标签: vb.net logical-operators boolean-expression


【解决方案1】:

有一种使用 Microsoft 脚本控制评估表达式的迂回方法..

右键单击您的项目并选择Add

在子菜单中,选择Reference

在出现的窗口中,点击左侧的COM

向下滚动直到看到MicrosoftScriptControl 1.0,然后双击它。

然后点击窗口右下方的Ok

此函数接受一个字符串并使用 VBScript 计算字符串表达式。您当然可以根据自己的需要进行调整。

Private Function EvaluateBoolean(formula As String) As Boolean
    Dim sc As New MSScriptControl.ScriptControl
    'SET LANGUAGE TO VBSCRIPT
    sc.Language = "VBSCRIPT"
    'ATTEMPT MATH
    Try
        Return Convert.ToBoolean(sc.Eval(formula))
    Catch ex As Exception
        'SHOW THAT IT WAS INVALID
        MessageBox.Show("Invalid Boolean expression")
    End Try
End Function

【讨论】:

    猜你喜欢
    • 2018-09-07
    • 1970-01-01
    • 2016-10-18
    • 2013-01-24
    • 2021-05-07
    • 2012-03-10
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多