将通用扩展方法限制为基本类型和字符串

2024-04-21

我想要 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

不,没有办法在类型约束中执行“或”操作。

在我看来,您确实想要一种具有值类型约束的通用重载,以及一种非泛型但具有字符串参数的重载。无论如何,您实际上无法指定密封类的类型约束。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将通用扩展方法限制为基本类型和字符串 的相关文章

随机推荐