Nullable(Of T)对象上的VB.NET扩展,给出了类型错误

Rik*_*ter 4 vb.net generics nullable

我想要的代码:

<Extension()>
Public Function NValue(Of T)(ByVal value As Nullable(Of T), ByVal DefaultValue As T) As T
    Return If(value.HasValue, value.Value, DefaultValue)
End Function
Run Code Online (Sandbox Code Playgroud)

基本上我想要它做的是将默认值赋给可空对象,并且根据它是否为null,它将给出自己的值或默认值.

所以使用Date对象,它会这样做,这有效,但我无法使用通用T:

<Extension()>
Public Function NValue(ByVal value As Date?, ByVal DefaultValue As Date) As Date
  Return If(value.HasValue, value.Value, DefaultValue)
End Function

Dim test As Date? = Nothing
Dim result = test.NValue(DateTime.Now)
Run Code Online (Sandbox Code Playgroud)

变量'result'现在具有当前的DateTime.

当我用T尝试它时,我得到它作为错误(Visual Studio在Nullable(Of T)中放置T:类型'T'必须是值类型或约束为'Structure'的类型参数才能使用使用'Nullable'或nullable modifier'?'.

非常感谢您的帮助!

问候

And*_*per 8

尝试:

Public Function NValue(Of T as Structure)(ByVal value As Nullable(Of T as Structure), ByVal DefaultValue As T) As T
Run Code Online (Sandbox Code Playgroud)

我不确定你是否需要这两个as Structure条款.

更新

根据以下评论,只需要第一个条款:

Public Function NValue(Of T as Structure)(ByVal value As Nullable(Of T), ByVal DefaultValue As T) As T
Run Code Online (Sandbox Code Playgroud)