我为我们的基页编写了一个小实用程序函数,它在大多数情况下都可以正常工作,但如果它以SetDropDownValue(dropdown, Nothing, True)
形式调用,我必须指定类型T.
由于编译器只需要在不使用类型时指定的类型,我想知道是否有更好的方法来编写代码。
方法如下:
Protected Sub SetDropDownValue(Of T As Structure)(ByVal target As DropDownList, ByVal value As Nullable(Of T), ByVal bindFirst As Boolean)
If target Is Nothing Then
Throw New ArgumentNullException("target")
End If
If bindFirst Then
target.DataBind()
End If
If value.HasValue Then
target.SelectedValue = value.Value.ToString()
Else
target.SelectedIndex = 0
End If
End Sub
对此方法进行编码的更好方法是什么?
答案 0 :(得分:1)
如果值为Nothing,那么 的类型并不重要,对吧?所以我会写另一种方法:
Protected Sub ClearDropDownValue(ByVal target As DropDownList, ByVal bindFirst As Boolean)
SetDropDownValue(target, CType(Nothing, Nullable(Of Integer)), bindFirst)
End Sub
道歉,如果我的VB语法不太正确 - 但基本上只是让它成为一个帮助方法,用SetDropDownValue
任意可空类型调用Nothing
。
答案 1 :(得分:0)
不幸的是,当你传递Nothing时,你将不得不指定类型。 VB值Nothing在编译器中没有类型,因此不能用于推断类型。如果您依赖于类型推断以避免专门添加类型参数,则无法将Nothing传递给允许编译器推断类型的参数。