我的方法Apply和Do我用来变换或计算表达式。在以下示例中,它们在泛型上下文中使用,泛型类型可以是值或引用。编译器允许某些用法,而其他用法则被视为错误。失败和非失败示例的代码类似,只是失败示例是变量初始化。
public static U Apply<T, U>(this T subject, Func<T, U> f) => f(subject);
public static void Do<T>(this T subject, Action<T> action) => action(subject);
public static void SomeMethodA<A>(A a = default(A))
{
// OK: apply some operation to 'a'.
a?.Apply(_ => default(A));
// OK: apply some operation to 'a' and 'Do' assign result to 'b'.
A b = default(A);
a?.Apply(x => x).Do(x => b = x);
a?.Apply(x => x)?.Do(x => b = x);
// Bad: apply some …Run Code Online (Sandbox Code Playgroud)