Переключатель C#: случай, не падающий до другого ограничения случаев

У меня также была проблема с той же проблемой, как только я переместил этот блок кода за пределы фрагмента в Utility Class , причем parentActivity передан как аргумент ,

Intent intent = new Intent(parentActivity, CameraCaptureActivity.class);
parentActivity.startActivityForResult(intent,requestCode);

Тогда я не получал никакого значения в методе onActivityResult этого фрагмента, после чего я изменил аргумент на фрагмент, поэтому пересмотренное определение метода выглядело как

Intent intent = new Intent(fragment.getContext(), CameraCaptureActivity.class);
fragment.startActivityForResult(intent,requestCode);

После этого мне удалось получить значение в onActivityResult на фрагменте

5
задан Community 23 May 2017 в 12:01
поделиться

5 ответов

Часто времена, когда Вы видите шум от огромного оператора переключения или многих, если операторы, которые могли бы попасть больше чем в один блок, Вы пытаетесь подавить плохой дизайн.

Вместо этого что, если Вы реализовали шаблон Спецификации, чтобы видеть, действуют ли что-то подобранное, и затем на него?

foreach(MonthSpecification spec in this.MonthSpecifications)
{
   if(spec.IsSatisfiedBy(month))
       spec.Perform(month);
}

затем можно просто сложить различные спецификации, которые соответствуют тому, что Вы пытаетесь сделать.

Трудно сказать, каков Ваш домен, таким образом, мой пример мог бы быть немного изобретен.

11
ответ дан 18 December 2019 в 07:32
поделиться

В операторах переключения C# можно провалиться случаи, только если нет никакого оператора для случая, Вы хотите провалиться

switch(myVar)
{
   case 1:
   case 2: // Case 1 or 2 get here
      break;
}

Однако, если Вы хотите провалиться с оператором, необходимо использовать страшный GOTO

switch(myVar)
    {
       case 1: // Case 1 statement
               goto case 2;
       case 2: // Case 1 or 2 get here
          break;
    }
8
ответ дан 18 December 2019 в 07:32
поделиться

Вы добавляете константы? Если так, возможно, что-то вроде этого работало бы (синтаксис C):

const int addToTotals[] = {123, 456, ..., 789};

for(i=month;i<12;i++)
   totals += addToTotals[i];

Можно сделать подобную вещь с переменными или указателями функции при необходимости в более сложных операторах, чем добавляют постоянный к общим количествам в течение каждого месяца после.

- Adam

1
ответ дан 18 December 2019 в 07:32
поделиться

Уже существует вопрос, обращаясь к этой теме:

Ограничения оператора переключения C# - почему?

Править:

Моя основная цель в указании, которое, gentlebeasts, то, что два вопроса почти идентичного имени добавляют беспорядок к пулу вопросов.

1
ответ дан 18 December 2019 в 07:32
поделиться

Запишите корпуса переключателей в обратном порядке

case 2:

case 1:

case 0:

break;


default:

Надеюсь, это поможет!

0
ответ дан 18 December 2019 в 07:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: