Существует несколько похожих методов (пример приведен в коде), которые вызываются последовательно, пока не будет получен результат.Результат подходит, если метод возвращает «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;
}
}