【发布时间】:2010-05-14 00:44:22
【问题描述】:
我想为 XElement/XAttribute 提供一个扩展方法,它允许我应用“ValueOrDefault”逻辑 - 可能有各种略有不同的实现:ValueOrNull、ValueOrDefault、NumericValueOrDefault(验证值是否为数字),但我想要约束这些方法,使它们只能与 ValueTypes 或 String 一起使用(即,使用任何其他引用类型实际上没有意义。是否可以使用每种方法的一个实现来做到这一点,或者我必须有一个 where约束是“结构”,而约束是“字符串” - 如果我在通用约束中结合结构和字符串,我会收到错误: “结构”约束和特定的类类型约束不能组合。
当前方法实现的一个例子如下:
<Extension()> _
Public Function ValueOrDefault(Of T As {Structure})(ByVal xe As XElement, ByVal defaultValue As T) As T
If xe Is Nothing or xe.Value = "" Then
Return defaultValue
End If
Return CType(Convert.ChangeType(xe.Value, GetType(T)), T)
End Function
【问题讨论】:
标签: extension-methods generics constraints