私はこの機能を持っています:
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
明示的な型だけでなく、暗黙的に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;
}
ただし、もちろん、過負荷解決では型の制約は考慮されないため、両方を同時に持つことはできません。これに対する解決策はありますか?