Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中的方法链接#_C# - Fatal编程技术网

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();
        }
    }
}

第二个是“更可读”的肯定听起来很主观。第二个是“更可读”的肯定听起来很主观。我同意我们可以通过扩展函数来提高可读性。然而,我的问题更多的是要有一些技术将方法与条件链接起来,然后传递一个
操作
,我同意我们可以通过扩展函数来提高可读性。然而,我的问题更多的是要有一些技术来将方法与条件链接起来,然后传递一个
操作