C# C语言中的方法链接#
假设我有一些这样的代码C# C语言中的方法链接#,c#,C#,假设我有一些这样的代码 var addResult = GetAddResult(num1, num2); var transformedResult = TransformResult(addResult ); if(CheckValidity(transformedResult)) { SendResult(transformedResult); } else { LogError(transformedResult); } 我在很多地方写这样的代码。基本上,它是一个
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
对此道歉更多的是概念上的澄清。但是我想知道这种技术是否可行。你可以编写一个C#扩展
e、 g
在延长期限的情况下:
public static void Handle(this AddResult addResult)
{
var transformedResult = TransformResult(addResult);
if(CheckValidity(transformedResult))
{
SendResult(transformedResult);
}
else
{
LogError(transformedResult);
}
}
或者更详细一点:
GetAddResult(num1, num2).ToTransformResult().HandleValidity();
通过这些扩展:
public static TransformResult ToTransformResult(this AddResult addResult)
{
return TransformResult(addResult);
}
public static void HandleValidity(this TransformResult addResult)
{
if(CheckValidity(transformedResult))
{
SendResult(transformedResult);
}
else
{
LogError(transformedResult);
}
}
我不确定这是否能满足你的所有要求 你可以写一个C#扩展名
e、 g
在延长期限的情况下:
public static void Handle(this AddResult addResult)
{
var transformedResult = TransformResult(addResult);
if(CheckValidity(transformedResult))
{
SendResult(transformedResult);
}
else
{
LogError(transformedResult);
}
}
或者更详细一点:
GetAddResult(num1, num2).ToTransformResult().HandleValidity();
通过这些扩展:
public static TransformResult ToTransformResult(this AddResult addResult)
{
return TransformResult(addResult);
}
public static void HandleValidity(this TransformResult addResult)
{
if(CheckValidity(transformedResult))
{
SendResult(transformedResult);
}
else
{
LogError(transformedResult);
}
}
我不确定这是否能满足你的所有要求 我想你能做到
//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) { ... }
我想你能做到
//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) { ... }
对Dabbas的解决方案有点扭曲-IsValid工作得非常好,但我觉得初始设置可能会更平滑
首先声明一个公共接口和一个静态工厂
interface IAddResult
{
int AddendA { get; set; }
int AddendB { get; set; }
int Sum { get; }
}
static class Result
{
public static IAddResult OfAdding(int a, int b)
{
// TODO: Return add result.
throw new NotImplementedException();
}
}
然后通过扩展添加链接功能
static class AddResultExtensions
{
public static IAddResult Transform(this IAddResult addResult)
{
// TODO: Transform add result.
throw new NotImplementedException();
}
public static void IfValid(this IAddResult addResult, Action thenInvokeThis,
Action elseInvokeThis)
{
// TODO: Validate.
bool isValid = true ? throw new NotImplementedException()
: false;
if (isValid)
{
thenInvokeThis();
}
else
{
elseInvokeThis();
}
}
}
对Dabbas的解决方案有点扭曲-IsValid工作得非常好,但我觉得初始设置可能会更平滑
首先声明一个公共接口和一个静态工厂
interface IAddResult
{
int AddendA { get; set; }
int AddendB { get; set; }
int Sum { get; }
}
static class Result
{
public static IAddResult OfAdding(int a, int b)
{
// TODO: Return add result.
throw new NotImplementedException();
}
}
然后通过扩展添加链接功能
static class AddResultExtensions
{
public static IAddResult Transform(this IAddResult addResult)
{
// TODO: Transform add result.
throw new NotImplementedException();
}
public static void IfValid(this IAddResult addResult, Action thenInvokeThis,
Action elseInvokeThis)
{
// TODO: Validate.
bool isValid = true ? throw new NotImplementedException()
: false;
if (isValid)
{
thenInvokeThis();
}
else
{
elseInvokeThis();
}
}
}
第二个是“更可读”的肯定听起来很主观。第二个是“更可读”的肯定听起来很主观。我同意我们可以通过扩展函数来提高可读性。然而,我的问题更多的是要有一些技术将方法与条件链接起来,然后传递一个
操作
,我同意我们可以通过扩展函数来提高可读性。然而,我的问题更多的是要有一些技术来将方法与条件链接起来,然后传递一个操作