c# - C#中的方法链
问题描述
说我有一些这样的代码
var addResult = GetAddResult(num1, num2);
var transformedResult = TransformResult(addResult );
if(CheckValidity(transformedResult))
{
SendResult(transformedResult);
}
else
{
LogError(transformedResult);
}
我在很多地方都在写这样的代码。基本上它是一个函数调用,其中一个的返回值是另一个的输入。还有一些流量变化取决于一些条件检查。
有没有办法以更易读的方式写这个?
例如
ExecuteFlow.GetAddResult(num1,num2).TransformResult.CheckValidity.IfTrue.SendResult.IfFalse.LogError
;
对此道歉更多的是概念上的澄清。但我想知道这种技术是否可行。
解决方案
我认为你可以做到这一点
//let's assume this is the type that GetAddResult method is returning.
public class MyAddResult { ... }
//let's say this is what method TransformResult is returning.
public class MyTransformResult { ... }
public static class MyFlow {
public static MyTransformResult TransformResult(this MyAddResult src) {
....
}
public static void IfValid(this MyTransformResult src, Action<MyTransformResult> methodIfTrue, Action<MyTransformResult> methodIfFalse) {
if( CheckValidity(src) )
methodIfTrue(src);
methodIfFalse(src);
}
}
//In another place
public void SendResult(MyTransformResult m) { ... }
//In another place
public void LogError(MyTransformResult m) { ... }
用法将是:
GetAddResult(num1, num2).TransformResult().IfValid(SendResult, LogError);
推荐阅读
- java - Liferay:如何在每个月的第一个星期日上午 8:00 到 11:00 之间以 5 分钟为间隔自动发送批量电子邮件
- cors - 工作箱后台同步 CORS
- php - mysqli_query 在类中带有准备好的语句
- python - 使用递归计算纳皮尔常数 (e)
- powerbi - 访问 PowerBI 中列表列的第一个元素
- powershell - If Else 语句 Powershell CSV 和输出 CSV
- angularjs - 在 JSON 对象键上使用 ng-repeat 在 md-tabs 中生成选项卡
- dart - 颤振垂直视口无界高度错误
- php - 将 PHP 数据库插入 HTML 表
- youtube-api - 如何从 YouTube API for CMS 帐户获取分析报告?