将多个委托添加到Func<;T>;以及返回第一个lambda委托(C#)的结果?

将多个委托添加到Func<;T>;以及返回第一个lambda委托(C#)的结果?,c#,delegates,lambda,C#,Delegates,Lambda,我想将lambda函数添加到Func。此外,我希望返回的值是第一个lambda委托的值(我最初无法更改第一个委托始终首先应用的顺序)。当我尝试使用+=语法执行此操作时,我得到以下结果: 错误44运算符“+=”不能应用于“System.Func”和“lambda expression”类型的操作数 我怎样才能实现上述目标?如果可能的话,我真的希望避免使用传统的委托语法 class Transaction { static Func<TEntity> ifNullInitiali

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

错误44运算符“+=”不能应用于“
System.Func
”和“lambda expression”类型的操作数

我怎样才能实现上述目标?如果可能的话,我真的希望避免使用传统的委托语法

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 ); 
        };
    }
}
类事务
{
静态函数ifNullInitializeWithThisReturnedObject=()=>default(tenty);
公共静态bool IsDirty{get;私有集;}
public init(Func IfNullInitializeWithThisReturnedObject)
{
ifNullInitializeWithThisReturnedObject=ifNullInitializeWithThisReturnedObject;
}
公共方法()
{
如果NullInitializeWithThisReturnedObject+=()=>
{ 
IsDirty=true;
返回默认值(tenty);
};
}
}

+=用于事件。您需要一个列表。有了这样的列表,您可以这样做:

// funcList is an IEnumerable<Func<TEntity>> we got somehow
bool firstTime = true;
TEntity result;
foreach (f in funcList)
{
    if (firstTime)
        result = f();
    else
        f();
    firstTime = false;
}
return result;
//funcList是一个IEnumerable
bool firstTime=true;
潜在结果;
foreach(函数列表中的f)
{
如果(第一次)
结果=f();
其他的
f();
第一次=错误;
}
返回结果;

+=用于事件。您需要一个列表。有了这样的列表,您可以这样做:

// funcList is an IEnumerable<Func<TEntity>> we got somehow
bool firstTime = true;
TEntity result;
foreach (f in funcList)
{
    if (firstTime)
        result = f();
    else
        f();
    firstTime = false;
}
return result;
//funcList是一个IEnumerable
bool firstTime=true;
潜在结果;
foreach(函数列表中的f)
{
如果(第一次)
结果=f();
其他的
f();
第一次=错误;
}
返回结果;

如果您创建了一个集合怎么办:
列表

如果您创建了一个集合怎么办:
列表

听起来您好像在尝试将lambda用作多播委托,但事实并非如此

请参见以下问题:


我建议您要么继续使用如下委托语法:,要么使用
列表

听起来您试图使用lambda作为多播委托,但事实并非如此

请参见以下问题:


我建议您要么继续使用如下委托语法:,要么使用
列表

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

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)();
    }
}
delegate int fdelegate();
var f1=new Func(()=>{return 1;});
var f2=新函数(()=>{return 2;});
var f1d=新的fdelegate(f1);
var f2d=新的fdelegate(f2);
f闸门f=f1d;
f+=f2d;
返回值;
bool first=true;
foreach(f.GetInvocationList()中的变量x)
{
如果(第一)
{
returnValue=((fdelegate)x)();
第一个=假;
}
其他的
{
((fdelegate)x)();
}
}

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

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)();
    }
}
delegate int fdelegate();
var f1=new Func(()=>{return 1;});
var f2=新函数(()=>{return 2;});
var f1d=新的fdelegate(f1);
var f2d=新的fdelegate(f2);
f闸门f=f1d;
f+=f2d;
返回值;
bool first=true;
foreach(f.GetInvocationList()中的变量x)
{
如果(第一)
{
returnValue=((fdelegate)x)();
第一个=假;
}
其他的
{
((fdelegate)x)();
}
}

那里的声明语法过多。您可以将其减少到
fdelegate f=()=>1;f+=()=>2那里的声明语法过多。您可以将其减少到
fdelegate f=()=>1;f+=()=>2与问题无关,但您确定您的init方法正确吗?你不应该交换任务的r/l吗?我不知道这里有什么问题。应该编译。和问题无关,但您确定您的init方法正确吗?你不应该交换任务的r/l吗?我不知道这里有什么问题。应该编译。这应该可以工作,但是
+=
用于多播代理。基本上所有的委托。这应该可以工作,但是
+=
是用于多播委托的。基本上是所有代表。