У меня также была проблема с той же проблемой, как только я переместил этот блок кода за пределы фрагмента в 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
на фрагменте
Часто времена, когда Вы видите шум от огромного оператора переключения или многих, если операторы, которые могли бы попасть больше чем в один блок, Вы пытаетесь подавить плохой дизайн.
Вместо этого что, если Вы реализовали шаблон Спецификации, чтобы видеть, действуют ли что-то подобранное, и затем на него?
foreach(MonthSpecification spec in this.MonthSpecifications)
{
if(spec.IsSatisfiedBy(month))
spec.Perform(month);
}
затем можно просто сложить различные спецификации, которые соответствуют тому, что Вы пытаетесь сделать.
Трудно сказать, каков Ваш домен, таким образом, мой пример мог бы быть немного изобретен.
В операторах переключения 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;
}
Вы добавляете константы? Если так, возможно, что-то вроде этого работало бы (синтаксис C):
const int addToTotals[] = {123, 456, ..., 789};
for(i=month;i<12;i++)
totals += addToTotals[i];
Можно сделать подобную вещь с переменными или указателями функции при необходимости в более сложных операторах, чем добавляют постоянный к общим количествам в течение каждого месяца после.
- Adam
Уже существует вопрос, обращаясь к этой теме:
Ограничения оператора переключения C# - почему?
Править:
Моя основная цель в указании, которое, gentlebeasts, то, что два вопроса почти идентичного имени добавляют беспорядок к пулу вопросов.
Запишите корпуса переключателей в обратном порядке
case 2:
case 1:
case 0:
break;
default:
Надеюсь, это поможет!