【问题标题】:Testing object instance returns "Conversion from string "" to type 'Boolean' is not valid."测试对象实例返回“从字符串转换”到类型“布尔”无效。”
【发布时间】:2013-10-31 04:38:45
【问题描述】:

我正在尝试测试对象的实例,但 VB 吐出并抛出异常:

Conversion from string "" to type 'Boolean' is not valid.

这是我的测试方式:

Dim objGA As New Gatherer.Gathered("", -1)
objGA = objGatherers(idx) 
If Not objGA Is Nothing Then  <--exception occurs here
   ' Do something here

End If

如果我不做这个检查,我会得到:

Object reference not set to an instance of an object.

我不明白第一个错误,因为objGA 是对象而不是字符串!

我还应该如何执行此测试?有一致的检查方法吗?

【问题讨论】:

  • 你能粘贴 objGatherers 方法代码吗?错误就在其中。
  • 我不能,因为我无权访问源代码。
  • Gatherer.Gathered("", -1) 和 objGatherers(idx) 的返回类型是什么
  • 您似乎没有发布发生错误的代码。请在您的问题中指出导致转换错误的行。
  • @CarlosLanderas 返回的对象是一个聚集的对象。 objGatherers 是一个数组。

标签: asp.net vb.net exception object-reference


【解决方案1】:

试试这个。

尝试使用IsDBNull(oValue) 方法检查空对象。 IsDBNull 是检查空值的内置函数。

Dim oValue As Object
Dim DefaultValue As Object
    If IsDBNull(oValue) Then
        Return DefaultValue
    Else
        Return oValue
    End If

【讨论】:

  • IsDBNull 专门用于检查从数据库返回的 Null 值。它不应用于检查对对象的空引用。
  • 查看此链接以了解有关 IsDBNull 的更多信息。 msdn.microsoft.com/en-us/library/tckcces5%28v=vs.90%29.aspx
  • 是的,我的观点完全是——你读过吗?具体DBNull的定义。这就是 IsDBNull 方法正在做的比较:msdn.microsoft.com/en-us/library/system.dbnull(v=vs.90).aspx "DBNull 类表示一个不存在的值。例如,在数据库中,表的一行中的列可能不包含任何数据无论如何。”
  • 是的,我读过它,它不用于检查对对象的空引用。
【解决方案2】:
If objGA IsNot Nothing Then
    ' put some code here...
End If

MSDN: IsNot Operator

【讨论】:

  • 一些解释将对未来的访问者有用。
  • 这不起作用 - 仍然得到Conversion from string "" to type 'Boolean' is not valid.
  • 我不认为Not object Is Nothingobject IsNot Nothing 的语法不同实现之间存在根本区别。他们最终得到相同的结果。
【解决方案3】:

试试这个:

    Dim objGA As New Gatherer.Gathered("", -1)
    Stop 'examine objGA
    objGA = objGatherers(idx)
    Stop 'examine objGA

首先,objGA 是一个“聚集对象”吗?当您键入第一行时,它会告诉您返回类型是什么吗?

【讨论】:

  • Stop 'examine objGA - 我在帖子中没有解释什么关于测试的内容?真的,我想知道哪里不清楚,以便完善我的帖子并得到答案。不要刻薄。
  • @AndroidAddict - 当你说,“返回的对象是一个聚集的对象。”听起来你不知道。如果您将检查放在第一个 Stop 的位置,则不应收到错误,因为它是“Gathered object”的新实例。
  • 我知道,这就是它应该是的 - 在我心中毫无疑问。好奇你在声明中读到了不确定性——除了它抛出了荒谬的异常。
  • @AndroidAddict - 应该是?如果您在停靠站检查它,应该没有问题,它是或不是一个聚集对象。我也不明白你为什么要使用一种方法来创建一个 Gathered 对象。
  • should be 来自抛出的异常。这不应该发生。如果它不是对象,则测试应该失败并且照常进行。奇怪的是抛出的异常。这是should be 的根源。该对象是从一个方法创建的,因为这是作者决定它应该采用的方式并且超出了帖子的范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
  • 2011-07-30
  • 2015-02-09
相关资源
最近更新 更多