gpt4 book ai didi

c# - 可以在 C# 中组合两个 Actions 吗?

转载 作者:太空狗 更新时间:2023-10-30 00:01:17 27 4
gpt4 key购买 nike

我只是在尝试使用 Action 来提取 lambda 表达式。

我有一个 bool 变量,根据它的值,我的 lambda 主体应该不同。

但是,在这种特殊情况下,不同之处在于调用了另一个不会更改返回类型的方法。这是我的:

Action<MyType> myLambda;

if (myBooleanCondition)
{
myLambda = x => x.ChangeBehavior();
}
else
{
myLambda = x => x.ChangeBehavior().ChangeSize();
}

是否可以将两个 lambda 定义减少/合并为一个以使其更优雅?

此项目使用 C# 4.0,但如果在较新的版本中对其进行了简化,请告诉我。

最佳答案

可以使用 += 运算符来连接委托(delegate),您可以使用它来简化您的具体示例。

例如,您可以像这样简化您的代码:

Action<MyType> myLambda = x => x.ChangeBehavior();

if (!myBooleanCondition)
myLambda += x => x.ChangeSize();

完整的可编译示例:

using System;

namespace Demo
{
class MyType
{
public MyType ChangeBehavior()
{
Console.WriteLine("ChangeBehavior()");
return this;
}

public void ChangeSize()
{
Console.WriteLine("ChangeSize()");
}
}

class Program
{
static void Main()
{
var x = new MyType();

test(true)(x); // Calls ChangeBehavior()
Console.WriteLine();
test(false)(x); // Calls ChangeBehavior() and then ChangeSize()
}

static Action<MyType> test(bool myBooleanCondition)
{
Action<MyType> myLambda = x => x.ChangeBehavior();

if (!myBooleanCondition)
myLambda += x => x.ChangeSize();

return myLambda;
}
}
}

话虽如此,我认为您不应该这样做 - 它太微妙了。您的原始代码没有任何问题!

关于c# - 可以在 C# 中组合两个 Actions 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40401610/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com