代码之家  ›  专栏  ›  技术社区  ›  devuxer

有人能帮忙做这个通用扩展方法吗?

  •  0
  • devuxer  · 技术社区  · 16 年前

    我正在尝试转换 XElement 要么 null 或者任何类型的 T 供应。

    以下是我目前为止的情况:

    public static T? ConvertToNullable<T>(this XElement element) where T : IConvertible
    {
        if (element.IsNill())
            return null;
        else
            return (T)element;
    }
    

    错误:

    类型 T 必须是不可为空的值类型才能将其用作参数 T 在泛型类型或方法中 System.Nullable<T>

    可以这样做吗?还是我必须为 bool ,请 byte , int , long ,请 double , decimal 等等?

    编辑

    我根本不应该用仿制药来解决这个问题。请看下面我的答案。

    3 回复  |  直到 16 年前
        1
  •  3
  •   Thomas Levesque    16 年前

    我不知道你想在这里做什么…唯一不可为空的类型是值类型,Xelement是引用类型。所以把它投射到 Nullable<T> ……

        2
  •  2
  •   Matt Hamilton    16 年前

    使用 where T : struct 因此,您的方法被限制为值类型(可以为空只对其有意义)。

        3
  •  1
  •   devuxer    16 年前

    好的,我现在知道了。我根本不需要使用仿制药。我可以将其保留为Xelement,并在调用扩展方法的地方进行转换。

    所以,我修改的代码如下:

    public static XElement NullIfNill(this XElement element)
    {
        if (element.IsNill())
            return null;
        else
            return element;
    }
    

    使用实例:

    var results =
        from
            p in participants.Elements()
        join
            co in conditionOrders.Elements()
            on (int?)p.Element(NS + "conditionOrderId").NullIfNill() equals (int)co.Element(NS + "id")