Как правильно получить результат из нескольких методов, которые должны вызываться последовательно, пока результат не будет получен - PullRequest
0 голосов
/ 18 февраля 2019

Существует несколько похожих методов (пример приведен в коде), которые вызываются последовательно, пока не будет получен результат.Результат подходит, если метод возвращает «true».Код работает, но операторы if выглядят ужасно.Как это можно сделать?

public static void Main() 
{
    int arg = 123;
    int res;

    if(GetResult1(arg, out res)){}
    else if(GetResult2(arg, out res)){}
    else if(GetResult3(arg, out res)){}
    else if(GetResult4(arg, out res)){}
    else throw new Exception("some ex");

    Console.WriteLine(res); // here we should get 33
}

public static bool GetResult1(int someArg, out int result)
{
    result = 11;
    return false;
}

public static bool GetResult2(int someArg, out int result)
{
    result = 22;
    return false;
}

public static bool GetResult3(int someArg, out int result)
{
    result = 33;
    return true;
}

public static bool GetResult4(int someArg, out int result)
{
    result = 44;
    return false;
}

Некоторые виды этой проблемы можно решить с помощью «IEnumerable» и «Linq» (код ниже).Но в моем случае метод возвращает несколько результатов (например, bool и int).

using System;
using System.Collections.Generic;
using System.Linq;

public class HelloWorld {
public static void Main() 
{
        int arg = 123;
        int res = ResultStrategy(arg).FirstOrDefault(r => r > 22);

        Console.WriteLine(res); // here we should get 33
    }

    public static IEnumerable<int> ResultStrategy(int someArg)
    {
        yield return GetResult1(someArg);
        yield return GetResult2(someArg);
        yield return GetResult3(someArg);
        yield return GetResult4(someArg);
    }

    public static int GetResult1(int someArg)
    {
        return 11;
    }

    public static int GetResult2(int someArg)
    {
        return 22;
    }

    public static int GetResult3(int someArg)
    {
        return 33;
    }

    public static int GetResult4(int someArg)
    {
        return 44;
    }
}
...