我有這樣的功能:實現用於可空<>一元綁定*和*引用類型
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;
}
但當然重載不看類型的限制,所以你不能同時兼得。有針對這個的解決方法嗎?
難道你不能只刪除where子句? – 2012-07-09 19:24:15
你可以簡單的重命名第二個函數。如果問題是不同的返回類型... – rekire 2012-07-09 19:25:58
否:第一個函數中的'U'必須聲明'struct'爲'Nullable'',並且第二個函數中的'U'必須聲明爲class '這樣'null'可以作爲'U'返回。 – 2012-07-09 19:28:16