在vb.net属性setter中没有命中断点

时间:2014-08-12 22:48:17

标签: vb.net visual-studio properties visual-studio-debugging

我使用的是Visual Studio 2008,我无法理解为什么我可以在代码中的断点处停止,但我的属性设置器中的断点不受尊重(不会进入属性设置器)。这是我的类代码的缩写片段:

        Dim objReader As SqlDataReader = cmd.ExecuteReader()
        Do While objReader.Read()
            SetObjectData(objReader)
        Loop
        objReader.Close()
        connection.Close()
    Catch ex As Exception
        Throw
    End Try
End Sub
Private Sub SetObjectData(ByVal theObjReader As SqlDataReader)
    Try
        Me._SubscriberID = Convert.ToInt32(theObjReader("SubscriberID"))
        Me._CompletedDate = theObjReader("CompletedDate")
        Me._AcknowledgeDate = theObjReader("AcknowledgeDate")
    Catch ex As Exception
        Dim msg As String
        msg = ex.ToString
    End Try
Private _CompletedDate As Nullable(Of Date)
Private _AcknowledgeDate As Nullable(Of Date)
Public Property CompletedDate() As Date?
    Get
        Return _CompletedDate
    End Get
    Set(ByVal value As Date?)
        If value.HasValue Then
            _CompletedDate = value
        Else
            _CompletedDate = Nothing
        End If
    End Set
End Property
Public Property AcknowledgeDate() As Date?
    Get
        Return _AcknowledgeDate
    End Get
    Set(ByVal value As Date?)
        If value.HasValue Then
            _AcknowledgeDate = value
        Else
            _AcknowledgeDate = Nothing
        End If
    End Set
End Property

SQL Server表中的两个日期都可以为null。在我的测试数据中, CompletedDate 是有效日期, AcknowledgeDate 是Nothing。上面的代码似乎工作,我可以单步执行构造函数,但不能进入属性setter代码。

编辑: Here are the breakpoints:

----------------------------------编辑没有。 2:------------------------------------------------ --------

我现在能够看到稍微不同的测试数据,在构造函数的以下行中抛出了System.InvalidCastException:

Me._CompletedDate = theObjReader("CompletedDate")

数据库表中的datetime列实际上是NULL。我认为属性setter代码可以处理这种情况,但我得到了这个:

System.InvalidCastException was caught
  Message="Specified cast is not valid."
  Source="TCBCommon"
  StackTrace:
     at TCBCommon.EventItem.SetObjectData(SqlDataReader theObjReader) in C:\Projects\CorporateBrain\TCB-Common\TCBCommon\EventItem.vb:line 48
 InnerException: 

所以,我猜真正的问题是将null datetime列作为Date数据类型的错误处理。我会对此进行研究,但仍希望能够进入物业制定者并且经历过#34;对可以为空的对象进行.HasValue测试。

2 个答案:

答案 0 :(得分:1)

"我可以单步执行构造函数但不能进入属性设置器"让我相信你的断点实际上并不在制定者中,但是你试图从外面进入它。在这种情况下,您可能感兴趣的是Visual Studio设置:

screenshot

如果你的断点实际上是里面的setter代码,那么这可能不是你的问题。

答案 1 :(得分:1)

在我看来,你并没有打电话给二传手。你发布的那一行

Me._CompletedDate  = theObjReader("CompletedDate") 'note the underscore) 

正在尝试直接设置私有字段的值。如果要执行属性设置器,则需要实际设置属性:

Me.CompletedDate = theObjReader("CompletedDate")  'no underscore