有人能解释我哪里出错了吗!
为了解释标题的变化,在测试项目中测试这个问题时,我发现它有时会抛出,但并不总是抛出(我知道这会让它更难追踪),在每种情况下,我都以相同的方式调用类等等!
注意回复-我已经将下面的答案标记为正确的,因为它确实解决了问题,尽管没有人能够解释为什么会出现这个问题!
为了便于解释,下面的第一个例子被简化了,完整的代码请向下滚动。
我从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
要获得类似True
或False
的字符串的相应布尔值,应使用:
布尔分析(字符串值)
在您的情况下:
If Boolean.Parse(ReturnedString) Then
'some code
End If
如果您不确定该值是否存在或是否可以解析,请考虑使用Boolean.TryParse而不是Boolean.Parse.