Подскажите как оптимизировать код - C#
Формулировка задачи:
Собственно вот...
void CalcValue(dynamic e)
{
var rez = e.GetType();
if (rez.Name == "PivotCellDisplayTextEventArgs")
e.DisplayText = string.Format("{0:0}", 0);
else if (rez.Name == "PivotGridCustomSummaryEventArgs")
e.CustomValue = string.Format("{0:0}", 0);
else return;
string name = e.DataField.PrefilterColumnName;
switch (name)
{
case "KOL_NE_DOPUSK":
GetValueProp(e, "н/д");
break;
case "KOL_NE_YAVKI":
GetValueProp(e, "н/я");
break;
case "KOL_NE_YAVKI_UV":
GetValueProp(e, "уваж");
break;
case "bud_kol_ne_dopusk":
GetValueProp(e, "н/д", 0);
break;
case "bud_kol_ne_yavki":
GetValueProp(e, "н/я", 0);
break;
case "bud_kol_ne_yavki_uv":
GetValueProp(e, "уваж", 0);
break;
case "kon_kol_ne_dopusk":
GetValueProp(e, "н/д", 1);
break;
case "kon_kol_ne_yavki":
GetValueProp(e, "н/я", 1);
break;
case "kon_kol_ne_yavki_uv":
GetValueProp(e, "уваж", 1);
break;
case "KOL_5":
GetValueOcenki(e, 5);
break;
case "KOL_4":
GetValueOcenki(e, 4);
break;
case "KOL_3":
GetValueOcenki(e, 3);
break;
case "KOL_2":
GetValueOcenki(e, 2);
break;
case "bud_kol_5":
GetValueOcenki(e, 5, budKont: 0);
break;
case "bud_kol_4":
GetValueOcenki(e, 4, budKont: 0);
break;
case "bud_kol_3":
GetValueOcenki(e, 3, budKont: 0);
break;
case "bud_kol_2":
GetValueOcenki(e, 2, budKont: 0);
break;
case "kon_kol_5":
GetValueOcenki(e, 5, budKont: 1);
break;
case "kon_kol_4":
GetValueOcenki(e, 4, budKont: 1);
break;
case "kon_kol_3":
GetValueOcenki(e, 3, budKont: 1);
break;
case "kon_kol_2":
GetValueOcenki(e, 2, budKont: 1);
break;
case "NA_5":
GetValuePoOcenkam(e, 5);
break;
case "NA_5_4":
GetValuePoOcenkam(e, 4);
break;
case "NA_5_4_3":
GetValuePoOcenkam(e, 3);
break;
case "bud_NA_5":
GetValuePoOcenkam(e, 5, budKont: 0);
break;
case "bud_NA_5_4":
GetValuePoOcenkam(e, 4, budKont: 0);
break;
case "bud_NA_5_4_3":
GetValuePoOcenkam(e, 3, budKont: 0);
break;
case "kon_NA_5":
GetValuePoOcenkam(e, 5, budKont: 1);
break;
case "kon_NA_5_4":
GetValuePoOcenkam(e, 4, budKont: 1);
break;
case "kon_NA_5_4_3":
GetValuePoOcenkam(e, 3, budKont: 1);
break;
case "VSEGO_STUD":
GetValuePoOcenkam(e, stCnt: true);
break;
case "VSEGO_STUD_SDALO":
GetValuePoOcenkam(e, stCnt: true, Sdalo: true);
break;
case "bud_vsego_stud":
GetValuePoOcenkam(e, stCnt: true, budKont: 0);
break;
case "bud_vsego_stud_sdalo":
GetValuePoOcenkam(e, stCnt: true, Sdalo: true, budKont: 0);
break;
case "kon_vsego_stud":
GetValuePoOcenkam(e, stCnt: true, budKont: 1);
break;
case "kon_vsego_stud_sdalo":
GetValuePoOcenkam(e, stCnt: true, Sdalo: true, budKont: 1);
break;
case "BEZ2_C_ODNOY3":
GetValuePoTroykam(e, 1);
break;
case "BEZ2_C_DVUMYA3":
GetValuePoTroykam(e, 2);
break;
case "BEZ2_C_3IBOLEE3":
GetValuePoTroykam(e, 3);
break;
case "bud_BEZ2_C_ODNOY3":
GetValuePoTroykam(e, 1, budKont: 0);
break;
case "bud_BEZ2_C_DVUMYA3":
GetValuePoTroykam(e, 2, budKont: 0);
break;
case "bud_BEZ2_C_3IBOLEE3":
GetValuePoTroykam(e, 3, budKont: 0);
break;
case "kon_BEZ2_C_ODNOY3":
GetValuePoTroykam(e, 1, budKont: 1);
break;
case "kon_BEZ2_C_DVUMYA3":
GetValuePoTroykam(e, 2, budKont: 1);
break;
case "kon_BEZ2_C_3IBOLEE3":
GetValuePoTroykam(e, 3, budKont: 1);
break;
case "BEZ2_VSE_3":
GetValueBEZ2_VSE_3(e);
break;
case "bud_BEZ2_VSE_3":
GetValueBEZ2_VSE_3(e, 0);
break;
case "kon_BEZ2_VSE_3":
GetValueBEZ2_VSE_3(e, 1);
break;
case "NA_2_PO_1PREDM":
GetValueNA_2_PO_PREDM(e, 1);
break;
case "NA_2_PO_2PREDM":
GetValueNA_2_PO_PREDM(e, 2);
break;
case "NA_2_PO_3PREDM":
GetValueNA_2_PO_PREDM(e, 3);
break;
case "NA_2_PO_4_I_BOLEE_PREDM":
GetValueNA_2_PO_PREDM(e, 4);
break;
case "bud_NA_2_PO_1PREDM":
GetValueNA_2_PO_PREDM(e, 1, 0);
break;
case "bud_NA_2_PO_2PREDM":
GetValueNA_2_PO_PREDM(e, 2, 0);
break;
case "bud_NA_2_PO_3PREDM":
GetValueNA_2_PO_PREDM(e, 3, 0);
break;
case "bud_NA_2_PO_4_I_BOLEE_PREDM":
GetValueNA_2_PO_PREDM(e, 4, 0);
break;
case "kon_NA_2_PO_1PREDM":
GetValueNA_2_PO_PREDM(e, 1, 1);
break;
case "kon_NA_2_PO_2PREDM":
GetValueNA_2_PO_PREDM(e, 2, 1);
break;
case "kon_NA_2_PO_3PREDM":
GetValueNA_2_PO_PREDM(e, 3, 1);
break;
case "kon_NA_2_PO_4_I_BOLEE_PREDM":
GetValueNA_2_PO_PREDM(e, 4, 1);
break;
case "absolutnaya_uspevaemkst":
GetValueAbsolutnaya_uspevaemkst(e);
break;
case "bud_absolutnaya_uspevaemkst":
GetValueAbsolutnaya_uspevaemkst(e, 0);
break;
case "kon_absolutnaya_uspevaemkst":
GetValueAbsolutnaya_uspevaemkst(e, 1);
break;
case "kachectvenaya_uspevaemkst":
GetValueKachectvenaya_uspevaemkst(e);
break;
case "bud_kachectvenaya_uspevaemkst":
GetValueKachectvenaya_uspevaemkst(e, 0);
break;
case "kon_kachectvenaya_uspevaemkst":
GetValueKachectvenaya_uspevaemkst(e, 1);
break;
case "SREDNIY_BAL":
GetValueSREDNIY_BAL(e);
break;
case "bud_SREDNIY_BAL":
GetValueSREDNIY_BAL(e, 0);
break;
case "kon_SREDNIY_BAL":
GetValueSREDNIY_BAL(e, 1);
break;
case "SREDNIY_BAL_OC":
GetValueSREDNIY_BAL_OC(e);
break;
case "bud_SREDNIY_BAL_OC":
GetValueSREDNIY_BAL_OC(e, 0);
break;
case "kon_SREDNIY_BAL_OC":
GetValueSREDNIY_BAL_OC(e, 1);
break;
case "VSEGO_NESDLI":
GetValueVSEGO_NESDLI(e);
break;
case "BUD_VSEGO_NESDLI":
GetValueVSEGO_NESDLI(e, 0);
break;
case "KON_VSEGO_NESDLI":
GetValueVSEGO_NESDLI(e, 1);
break;
}
if (dataRefresh)
e.CustomValue = e.CustomValue.ToString() == "" ? "0" : e.CustomValue.ToString() == "0,00" ? "0" : e.CustomValue;
else
e.DisplayText = e.DisplayText.ToString() == "" ? "0" : e.DisplayText.ToString() == "0,00" ? "0" : e.DisplayText;
}Решение задачи: «Подскажите как оптимизировать код»
textual
Листинг программы
internal class Program
{
private void GetValueProp(object someArg, string someString, int someInt = 0)
{
//ТУТ НИЧЕГО, ИБО ПРОСТО ПРИМЕР
}
//Собственно таблица функций
private Dictionary<string, Action<object, object>> funcTable;
public Program()
{
//Заполняем таблицу функций функциями
funcTable = new Dictionary<string, Action<object, object>>
{
{"KOL_NE_DOPUSK", (o1, o2) => { GetValueProp(o1, "н/д"); }},
{"KOL_NE_YAVKI", (o1, o2) => { GetValueProp(o1, "н/я");}},
{"KOL_NE_YAVKI_UV", (o1, o2) => {GetValueProp(o1, "уваж"); }},
{"bud_kol_ne_dopusk", (o1, o2) => {GetValueProp(o1, "н/д", 0); }}
};
}
private static void Main(string[] args)
{
Program p = new Program();
p.Run();
Console.WriteLine("\nDone");
Console.ReadKey();
}
private void Run()
{
string PrefilterColumnName = "KOL_NE_YAVKI_UV"; //Допустим, что получили это откуда-то извне
//Вызываем нужную функцию. Передать нам тут нечего, поэтому - null и null
funcTable[PrefilterColumnName](null, null);
}
}