2010-05-14 125 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

沒有,有沒有做一個型「或」限制的方式。

在我看來,你真的想要一個通用的值類型約束的重載,一個是非泛型的,但有一個字符串參數。無論如何你都不能真正指定一個密封類的類型約束。