我有这个功能:
public static U? IfNotNull<T, U>(this T? self, Func<T, U?> func)
where T : struct
where U : struct
{
return (self.HasValue) ? func(self.Value) : null;
}
例子:
int? maybe = 42;
maybe.IfNotNull(n=>2*n); // 84
maybe = null;
maybe.IfNotNull(n=>2*n); // null
我希望它适用于隐式可为空的引用类型以及显式Nullable<>
类型。此实现将起作用:
public static U IfNotNull<T, U>(this T? self, Func<T, U> func)
where T : struct
where U : class
{
return (self.HasValue) ? func(self.Value) : null;
}
但是,重载决议当然不考虑类型约束,所以你不能同时拥有两者。有针对这个的解决方法吗?