我正在尝试将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
,{{1等等?
修改
我根本不应该使用泛型。请参阅下面的答案。
答案 0 :(得分:3)
我不确定你在这里尝试做什么...唯一不可为空的类型是值类型,而XElement是引用类型。因此将其转换为Nullable<T>
...
答案 1 :(得分:2)
使用where T : struct
,以便您的方法仅限于值类型(Nullable只对其有意义)。
答案 2 :(得分:1)
好的,我现在明白了。我根本不需要使用泛型。我可以把它留作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")