Использование выражения переключения C# с вводом массива

Мне интересно, могу ли я использовать выражение переключателя с вводом нескольких блоков в качестве массива. Я попробовал, не помогло, но возможно я что-то не так делаю с синтаксисом. Вот что я имею в виду под множественным вводом:

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

То, что вы хотите проверить, эквивалентно ли rawClusterValues какому-либо случаю? или любой элемент из rawClusterValues соответствует любому элементу из регистра?

Prasad Telkikar 19.08.2024 09:27

Лучше опишите, что значит не работает. Ваш код и синтаксис кажутся мне правильными и работающими. Если нет, возможно, у вас другие ожидания, чем у меня/нас, и тогда нам нужно это знать.

Ralf 19.08.2024 09:58

Код должен работать как положено: dotnetfiddle.net/xSGy2Y, что вы имели в виду, говоря, что это не сработало?

shingo 19.08.2024 10:05
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Да, вы можете использовать шаблоны списков в выражениях переключателей, как в вашем примере. Он отлично компилируется и работает в новейшей версии .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"
};

Другие вопросы по теме