Если у вас есть объект, содержащий список, вы можете разместить логику непосредственно на объекте.Хотя на самом деле нет никакой причины (которую вы указали) использовать массив, поэтому можно также сделать его списком.
public class Combination
{
public List<int> CombinationSet { get; set; }
public bool IsSequenceEqual(params int[] values)
{
return CombinationSet.SequenceEqual(values);
}
public override string ToString()
{
return string.Join(", ", CombinationSet);
}
}
Так что каждой комбинации не важно, сколько параметров вы передаете, она простохочет убедиться, что порядок и количество предметов равны.Так что распространите это на функцию:
public static List<Combination> FindCombinations(params int[] values)
{
var result = _Combinations
.Where(c => c.IsSequenceEqual(values))
.ToList();
return result;
}
И , кажется, работает в примере DotNetFiddle :
public static void Main()
{
_Combinations.Add(new Combination{ CombinationSet = new List<int>{ 1, 2, 3}});
_Combinations.Add(new Combination{ CombinationSet = new List<int>{ 2, 3, 4}});
_Combinations.Add(new Combination{ CombinationSet = new List<int>{ 3, 2, 1}});
_Combinations.Add(new Combination{ CombinationSet = new List<int>{ 1, 2, 3}});
Console.WriteLine("Test 1 (1,2,3)");
foreach(var result in FindCombinations(1,2,3))
{
Console.WriteLine(result.ToString());
}
Console.WriteLine("Test 1 (3,2,1)");
foreach(var result in FindCombinations(3,2,1))
{
Console.WriteLine(result.ToString());
}
Console.WriteLine("Test 1 (1,2)");
foreach(var result in FindCombinations(1,2))
{
Console.WriteLine(result.ToString());
}
}
, что приводит к:
Испытание 1 (1,2,3)
1, 2, 3
1, 2, 3
Испытание 1 (3,2,1)
3, 2, 1
Тест 1 (1,2)