【发布时间】:2011-08-12 15:10:45
【问题描述】:
在以下情况下,处理强类型数据集的 Null 值的最简单/最干净/最简单/最好的方法是什么:
- 基类有一个可以通过其构造函数设置的 Nullable 值
- 派生类的构造函数将强类型数据集行作为参数,并且在访问空值时抛出异常。
这里有一个简化的例子来演示我面临的问题。与您的代码有任何相似之处纯属巧合。
Public MustInherit Class BaseClass
Private _Number as Nullable(of integer)
Public Sub New(Number as Nullable(of integer))
_Number = Number
End Sub
End Class
Public Class DerivedClass
Inherits BaseClass
'Throw System.Data.StrongTypingException "The value for column 'Number'
'in table 'SomeData' is DBNull." when Number is null
Public Sub New(DataRow as my DataDLL.SomeDataRow)
MyBase.New(DataRow.Number)
End Sub
'First statement of this 'Sub New' must be a call to 'MyBase.New'
'or 'MyClass.New' because base class 'BaseClass' of 'DerivedClass'
'does not have an accessible 'Sub New' that can be called with no arguments
Public Sub New(DataRow as my DataDLL.SomeDataRow)
If TermRow.IsNumberNull() Then
MyBase.New(Nothing)
Else
MyBase.New(DataRow.Number )
End If
End Sub
'Also Throw System.Data.StrongTypingException because As part of preparing
'the argument list for the call to IIf, the Visual Basic compiler calls
'every function in every expression.
Public Sub New(DataRow As MyData)
MyBase.New(DirectCast(IIf(DataRow.IsNumberNull(), _
Nothing, _
TermRow.Number), Nullable(Of Integer)))
End Sub
End Class
我放了 3 个Public Sub New 只是为了显示我考虑过的 3 个替代方案。
【问题讨论】:
-
第一个构造函数抛出的异常是什么?在第二个,就像它说它必须是第一行,所以你必须弄清楚如何把你所有的逻辑放在一行上。 VB 很有趣!
标签: asp.net vb.net asp.net-3.5 strongly-typed-dataset