c# - 将多个委托(delegate)添加到 Func<T> 并返回第一个 lambda 委托(delegate) (C#) 的结果?

标签 c# delegates lambda

我想向 Func<T> 添加一个 lambda 函数.此外,我希望返回值是第一个 lambda 委托(delegate)的值(我最初无法更改第一个始终首先应用的顺序)。当我尝试使用 += 执行此操作时语法我得到以下内容:

Error 44 Operator '+=' cannot be applied to operands of type 'System.Func<TEntity>' and 'lambda expression'

我怎样才能实现上述目标?如果可能的话,我真的很想避免使用传统的委托(delegate)语法。

class Transaction
{
    static Func<TEntity> ifNullInitializeWithThisReturnedObject = () => default(TEntity);

    public static bool IsDirty { get; private set; }

    public init (Func<TEntity> IfNullInitializeWithThisReturnedObject)
    {
         ifNullInitializeWithThisReturnedObject = IfNullInitializeWithThisReturnedObject;
    }
    public void somemethod()
    {
        ifNullInitializeWithThisReturnedObject += () => 
        { 
            IsDirty = true; 
            return default( TEntity ); 
        };
    }
}

最佳答案

为什么不使用传统的委托(delegate)语法,然后显式获取调用列表呢?例如:

delegate int fdelegate();

var f1 = new Func<int>(() => { return 1; });
var f2 = new Func<int>(() => { return 2; });

var f1d = new fdelegate(f1);
var f2d = new fdelegate(f2);
fdelegate f = f1d;
f += f2d;

int returnValue;
bool first = true;
foreach (var x in f.GetInvocationList())
{
    if (first)
    {
        returnValue = ((fdelegate)x)();
        first = false;
    }
    else
    {
        ((fdelegate)x)();
    }
}

关于c# - 将多个委托(delegate)添加到 Func<T> 并返回第一个 lambda 委托(delegate) (C#) 的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6536833/

相关文章:

c# - WCF RESTful 服务的 Java 和其他客户端

c# - 如何将委托(delegate)从 c# 转换为 vb.net?

c# - 带委托(delegate)或开关的字典?

javascript - 有趣的递归 lambda 示例

java - 为什么 lambda 表达式可以用作比较器?

python - 如何将 lambda 函数应用于多列

c# - 用自定义图像替换 "red-cross"的DataGridViewImageColumn中的 "new-row"

c# - 添加自定义样式到 Mahapps.Metro 现有的

c# - 使用 lambda 表达式而不是委托(delegate)是个好主意吗?

c# - 为什么下面的代码编译没有错误?