代码之家  ›  专栏  ›  技术社区  ›  ilivewithian

使用可为空的类型设置下拉值

  •  0
  • ilivewithian  · 技术社区  · 16 年前

    我为我们的基本页编写了一个小的实用程序函数,在大多数情况下它都可以正常工作,但是如果在表单中调用它 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 回复  |  直到 16 年前
        1
  •  1
  •   Jon Skeet    16 年前

    如果值为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 任意可为空的类型。

        2
  •  0
  •   JaredPar    16 年前

    不幸的是,当您什么也不传递时,您将不得不指定类型。VB值Nothing在编译器中没有类型,因此不能用于推断类型。如果您依赖类型推断来避免专门添加类型参数,则不能向允许编译器推断类型的参数传递任何内容。