Мне интересно, могу ли я использовать выражение переключателя с вводом нескольких блоков в качестве массива. Я попробовал, не помогло, но возможно я что-то не так делаю с синтаксисом. Вот что я имею в виду под множественным вводом:
public static string EvaluteIt(int[] rawClusterValues)
{
string result = "Unknown";
switch(rawClusterValues)
{
case [0, 9, 4, 4, 4, 5]:
{
result = "some result here";
break;
}
case [ 1, 0, 0, 0, 0, 0 ]:
{
result = "It is found";
break;
}
case [ 3, 2, 0, 0, 0, 1 ]:
{
result = "this is another result";
break;
}
default:
{
result = "result is default";
break;
}
}
return result;
}
Лучше опишите, что значит не работает. Ваш код и синтаксис кажутся мне правильными и работающими. Если нет, возможно, у вас другие ожидания, чем у меня/нас, и тогда нам нужно это знать.
Код должен работать как положено: dotnetfiddle.net/xSGy2Y, что вы имели в виду, говоря, что это не сработало?
Да, вы можете использовать шаблоны списков в выражениях переключателей, как в вашем примере. Он отлично компилируется и работает в новейшей версии .NET. Вы даже можете использовать более сложные шаблоны списков, например case [5, .., 10]
. Я вставил сюда ваш пример с одним дополнительным случаем, который я упомянул: https://dotnetfiddle.net/cBQt04
using System;
public class Program
{
public static void Main()
{
var result = EvaluteIt(new[] { 1, 0, 0, 0, 0, 0 });
Console.WriteLine(result);
var result2 = EvaluteIt(new[] { 5, 1, 4, 6, 10 });
Console.WriteLine(result2);
}
public static string EvaluteIt(int[] rawClusterValues)
{
string result = "Unknown";
switch (rawClusterValues)
{
case [0, 9, 4, 4, 4, 5]:
{
result = "some result here";
break;
}
case [1, 0, 0, 0, 0, 0]:
{
result = "It is found";
break;
}
case [3, 2, 0, 0, 0, 1]:
{
result = "this is another result";
break;
}
case [5, .., 10]:
{
result = "Cool pattern";
break;
}
default:
{
result = "result is default";
break;
}
}
return result;
}
}
Если у вас возникли проблемы с кодом, фразы «Я попробовал, это не сработало» недостаточно, чтобы вам чем-то помочь. Что именно не работает?
Вы перепутали оператор переключения и выражение переключения в формулировке, это две разные вещи. Поэтому, даже если вы показали здесь оператор переключения, это пример выражения переключения, делающего то же самое. В качестве основы использовался код из @Orion, чтобы вам было проще сравнивать синтаксис операторов и выражений.
public static string EvaluteIt(int[] rawClusterValues) => rawClusterValues switch
{
[0, 9, 4, 4, 4, 5] => "some result here",
[1, 0, 0, 0, 0, 0] => "It is found",
[3, 2, 0, 0, 0, 1] => "this is another result",
[5, .., 10] => "Cool pattern",
_ => "result is default"
};
То, что вы хотите проверить, эквивалентно ли
rawClusterValues
какому-либо случаю? или любой элемент изrawClusterValues
соответствует любому элементу из регистра?