如何编写可以将Nullable对象用作扩展方法的泛型方法。我想向父元素添加一个XElement,但前提是要使用的值不为null。
e.g。
public static XElement AddOptionalElement<T>(this XElement parentElement, string childname, T childValue){
...
code to check if value is null
add element to parent here if not null
...
}
如果我这样做AddOptionalElement<T?>(...)
那么我就会遇到编译器错误。
如果我这样做AddOptionalElement<Nullable<T>>(...)
那么我就会遇到编译器错误。
有没有办法可以实现这个目标?
我知道我可以调用这个方法:
parent.AddOptionalElement<MyType?>(...)
但这是唯一的方法吗?
答案 0 :(得分:12)
public static XElement AddOptionalElement<T>(
this XElement parentElement, string childname, T? childValue)
where T : struct
{
// ...
}
答案 1 :(得分:4)
您需要将T
限制为struct
- 否则无法为空。
public static XElement AddOptionalElement<T>(this XElement parentElement,
string childname,
T? childValue) where T: struct { ... }
答案 2 :(得分:1)
尝试
AddOptionalElement<T>(T? param) where T: struct { ... }
答案 3 :(得分:0)
The Nullable类型具有约束where T : struct, new()
,因此您的方法应该包含struct
约束,以使Nullable<T>
正常工作。生成的方法应如下所示:
public static XElement AddOptionalElement<T>(this XElement parentElement, string childname, T? childValue) where T : struct
{
// TODO: your implementation here
}