【问题标题】:Constrain generic extension method to base types and string将通用扩展方法约束到基本类型和字符串
【发布时间】: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


    【解决方案1】:

    不,没有办法在类型约束中做“或”。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-29
      • 2020-05-27
      • 1970-01-01
      • 2013-12-26
      • 2012-02-03
      • 2017-03-26
      • 2017-04-17
      • 1970-01-01
      相关资源
      最近更新 更多