使用可空类型设置下拉值

时间:2009-04-23 15:20:09

标签: .net vb.net generics

我为我们的基页编写了一个小实用程序函数,它在大多数情况下都可以正常工作,但如果它以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

对此方法进行编码的更好方法是什么?

2 个答案:

答案 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传递给允许编译器推断类型的参数。