我想向 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/