2010-05-14 82 views
2

我想要一个XElement/XAttribute的扩展方法,它允许我应用一个“ValueOrDefault”逻辑 - 可能具有各种稍微不同的实现:ValueOrNull,ValueOrDefault,NumericValueOrDefault值是数字),但我想约束这些方法,以便它们只能使用ValueTypes或String(即使用任何其他引用类型没有意义。是否可以通过每个方法的一个实现来实现,或者我必须有约束是“结构”和约束是“字符串”的地方 - 如果我在通用约束中结合结构和字符串,我会得到错误: '结构'约束和一个特定的类类型约束不能组合使用约束基类型和字符串的通用扩展方法

目前的方法实现的一个例子如下:

<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 

回答

2

没有,有没有做一个型“或”限制的方式。

在我看来,你真的想要一个通用的值类型约束的重载,一个是非泛型的,但有一个字符串参数。无论如何你都不能真正指定一个密封类的类型约束。