将布尔值转换为字符串时出现问题(部分时间有效,但并非全部有效)



有人能解释我哪里出错了吗!

为了解释标题的变化,在测试项目中测试这个问题时,我发现它有时会抛出,但并不总是抛出(我知道这会让它更难追踪),在每种情况下,我都以相同的方式调用类等等!

注意回复-我已经将下面的答案标记为正确的,因为它确实解决了问题,尽管没有人能够解释为什么会出现这个问题!

为了便于解释,下面的第一个例子被简化了,完整的代码请向下滚动。

我从xml中阅读如下:

Return XElement.Value

在这种情况下,.Value为"True"或"False">

如果我取返回的值(对于这个Q称为ReturnedString)并执行:

If ReturnedString Then
'some code
End If

If CBool(ReturnedString) Then
'some code
End If

它有时会在If语句Conversion from string "False" to type 'Long' is not valid.上引发异常

但是

如果我这样做:

Dim ReturnBol as Boolean = ReturnedString
If ReturnedBol then
'some code
End If

一直都很好!

ONLY发生在从xml读取时。

xml是:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Root>
<_Weekly>
<_Flag>True</_Flag>
</_Weekly>
</Root>

我确信我错过了一些显而易见的东西——有人能给我指一下吗(如果我错过了任何重要信息,请大喊!)。

提前谢谢。

提取代码:

读取的代码属于以下类别:

Public Class MyXml
Dim __Weekly As New _Weekly
Public Property Weekly As _Weekly
Get 
Return __Weekly
End Get 
Set(value As _Weekly) 
End Set 
End Property
Public Class _Weekly
Property Flag As String
Get
Return Readxml("_Weekly", "_Flag")
End Get
Set(value As String)
SaveToXml("_Weekly", "_Flag", value)
End Set
End Property
End Class
Private Shared Function Readxml(xmlItem As String, xmlname As String)
Readxml = Nothing
Dim CCXml As XDocument
If My.Computer.FileSystem.FileExists(XMLPath) Then
CCXml = XDocument.Load(XMLPath)
Dim xEl As XElement = (From El In CCXml.Root.Elements() Where El.Name = xmlItem).FirstOrDefault
If Not IsNothing(xEl) Then
Dim ChxEl As XElement = (From El2 In xEl.Elements() Where El2.Name = xmlname).FirstOrDefault
If Not IsNothing(ChxEl) Then
Return ChxEl.Value
End If
End If
End Function
End Class

所以要返回字符串,请执行以下操作:

Dim myxml as New MyXml
If myxml.Weekly.Flag then
End If

请不要给我讲嵌套类和所有陷阱,我很清楚潜在的问题,但这恰好是我需要的(建议或建设性的批评,当然非常欢迎!)

CBool是一个用于将表达式转换为布尔数据类型的函数。它的参数不能是字符串(除了"true"或"false"),这就是抛出异常的原因。

尝试

If CBool(ReturnedString = "True") Then
'some code
End If

If CBool(ReturnedString.ToString()) Then
'some code
End If

要获得类似TrueFalse的字符串的相应布尔值,应使用:

布尔分析(字符串值)

在您的情况下:

If Boolean.Parse(ReturnedString) Then
'some code
End If

如果您不确定该值是否存在或是否可以解析,请考虑使用Boolean.TryParse而不是Boolean.Parse.

最新更新