gpt4 book ai didi

c# - 用于多个方法调用的 Func 委托(delegate)

转载 作者:行者123 更新时间:2023-11-30 17:13:54 25 4
gpt4 key购买 nike

我之前问过 Converting using SqlConnection to Func delegate

如何使用以下委托(delegate)使用同一事务进行多次调用?使事情复杂化的是,其中一个调用我希望返回一个值。

我有以下委托(delegate)函数定义

protected TResult UsingSqlTransaction<TResult>(Func<SqlTransaction, TResult> myFunction)
{
using (SqlConnection sqlConn = new SqlConnection(ConnectionString))
{
sqlConn.Open();
using (SqlTransaction sqlTrans = sqlConn.BeginTransaction())
{
var result = myFunction(sqlTrans);
sqlTrans.Commit();

return result;
}

}
}

当前使用情况

public Guid? InsertUpdate(News entity)
{
return UsingSqlTransaction(sqlTrans => data.InsertUpdate(sqlTrans, entity));
}

解决方案 - 查看接受的答案

public Guid? InsertUpdate(News entity)
{
return UsingSqlTransaction(sqlTrans =>
{
var token = data.InsertUpdate(sqlTrans, entity);
data.DoSomethingElse(sqlTrans, entity);
return token;
});
}

//-- The above UsingSqlTransaction remains unchanged

最佳答案

您可以使用“ block ”lambda。而不是:

public Guid? InsertUpdate(News entity)
{
return UsingSqlTransaction(sqlTrans => data.InsertUpdate(sqlTrans, entity));
}

您可以使用(注意大括号和分号):

public List<Guid?> InsertUpdate(News entity)
{
return UsingSqlTransaction(sqlTrans =>
{
var result = new List<Guid?>();
result.Add(data.InsertUpdate(sqlTrans, entity));
result.Add(data.DoSomethingElse(sqlTrans, entity));
return result;
});
}

回复:您的更新。我会这样写(请注意,您可以存储 token 并在 lambda 的末尾返回它,就像普通方法一样):

public Guid? InsertUpdate(News entity)
{
return UsingSqlTransaction(sqlTrans =>
{
var token = data.InsertUpdate(sqlTrans, entity);
data.DoSomethingElse(sqlTrans, entity);
return token;
});
}

关于c# - 用于多个方法调用的 Func 委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9321273/

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