Улучшить код с кучей ветвлений - C#
Формулировка задачи:
Доброго времени суток!
Есть вариант написания подобной логики без огромного колличества Ifов и без мега switchей?
if (Stime > DateTime.MinValue || Etime < DateTime.MaxValue)
{
if (Stime > DateTime.MinValue)
{
tempA = tempA.Where(u => u.ecm_TimeLine.EventSTime >= Stime);
tempB = tempB.Where(u => u.EventETime >= Stime && u.EventType < 4);
}
if (Etime < DateTime.MaxValue)
{
tempA = tempA.Where(u => u.ecm_TimeLine.EventSTime <= Etime);
tempB = tempB.Where(u => u.EventETime <= Etime && u.EventType < 4);
}
else
{
tempA = tempA.Where(u => u.ecm_TimeLine.EventSTime <= DateTime.Now);
tempB = tempB.Where(u => u.EventETime <= DateTime.Now && u.EventType < 4);
}
OnlyDeal = false;
}
if (EmployeeId > -1)
{
tempA = tempA.Where(u => u.ecm_TimeLine.EmployeeId_Input == EmployeeId);
tempB = tempB.Where(u => u.EmployeeId_Input == EmployeeId && u.EventType < 4);
OnlyDeal = false;
}
if (State == 1)
{
tempA = tempA.Where(u => !u.ecm_TimeLine.IsRemoved && u.ecm_TimeLine.EventType == 4);
}
else if (State == 2)
{
tempA = tempA.Where(u => !u.ecm_TimeLine.IsRemoved && u.ecm_TimeLine.EventType == 5);
}
else if (State == 3)
{
tempA = tempA.Where(u => !u.ecm_TimeLine.IsRemoved && (u.ecm_TimeLine.EventType == 4 || u.ecm_TimeLine.EventType == 5));
}
else if (State == 4)
{
tempA = tempA.Where(u => !u.ecm_TimeLine.IsRemoved && u.ecm_TimeLine.EventType == 6);
}
else if (State == 5)
{
tempA = tempA.Where(u => !u.ecm_TimeLine.IsRemoved && (u.ecm_TimeLine.EventType == 4 || u.ecm_TimeLine.EventType == 6));
}
else if (State == 6)
{
tempA = tempA.Where(u => !u.ecm_TimeLine.IsRemoved && (u.ecm_TimeLine.EventType == 5 || u.ecm_TimeLine.EventType == 6));
}
else if (State == 7)
{
tempA = tempA.Where(u => !u.ecm_TimeLine.IsRemoved);
}
if (HasNextContact == 1)
{
tempB = tempB.Where(u => u.EventSTime > DateTime.Now && u.EventState == 1 && u.EventType < 4);
}
else if (HasNextContact == 2)
{
tempB = tempB.Where(u => u.EventSTime <= DateTime.Now && u.EventType < 4);
}Решение задачи: «Улучшить код с кучей ветвлений»
textual
Листинг программы
Data.cs
using System;
namespace ConsoleApplication1
{
public class TimeLine
{
public DateTime EventSTime { get; set; }
public int EmployeeId_Input { get; set; }
public bool IsRemoved { get; set; }
public int EventType { get; set; }
}
public class Data
{
public TimeLine EcmTimeLine { get; set; }
public DateTime EventETime { get; set; }
public int EventType { get; set; }
public int EmployeeId_Input { get; set; }
public int EventState { get; set; }
public DateTime EventSTime { get; set; }
}
}