Я хочу иметь метод расширения для 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