Schreiben Angenommen, der Benutzer ganz oder teilweise ein Datum eingeben {Tag, Monat, Jahr}Cleanly zahlreiche Bedingungen gegen einen optionalen Eingang
Jedes Feld ist optional. Sie können nur den Tag, oder nur den Monat, oder den Tag und den Monat etc. eingeben.
Ich dann eine Liste von Daten durchlaufen, und überprüfen Sie, ob die Daten übereinstimmen, basierend auf was der Benutzer eingegeben hat (und je nachdem, wie viel davon traten sie):
Input: {D = 20} CheckDate: 2015/01/20 = true
Input: {D = 20} CheckDate: 2015/01/15 = false
Input: {D = 20, Month = 6} CheckDate: 2015/06/20 = true
Input: {D = 20, Month = 6} CheckDate: 2015/01/20 = false
Input: {D = 20, Month = 6, Year = 2016} CheckDate: 2016/06/20 = true
Input: {D = 20, Month = 6, Year = 2016} CheckDate: 2015/06/20 = false
ich durch Überprüfung jede mögliche Kombination von Eingabedatum vor dem Anreisedatum wie so diese Logik erreichen kann:
private bool IsInputDateMatch(InputDate inputDate, DateTime date)
{
if (inputDate.Day != 0 && inputDate.Month != 0 && inputDate.Year != 0)
return date.Day == inputDate.Day && date.Month == inputDate.Month && date.Year == inputDate.Year;
if(inputDate.Day !=0 && inputDate.Month != 0)
return date.Day == inputDate.Day && date.Month == inputDate.Month;
if (inputDate.Day != 0 && inputDate.Year != 0)
return date.Day == inputDate.Day && date.Year == inputDate.Year;
if (inputDate.Month != 0 && inputDate.Year != 0)
return date.Month == inputDate.Month && date.Year == inputDate.Year;
if (inputDate.Day != 0)
return date.Day == inputDate.Day;
if (inputDate.Month != 0)
return date.Month == inputDate.Month;
if (inputDate.Year != 0)
return date.Year == inputDate.Year;
return true;
}
Aber das ist nicht sehr elegant.
Wenn Sie auf eine logische Situation wie diese stoßen (Überprüfung mehrerer Bedingungen basierend darauf, wie viel von etwas bereitgestellt wird), wie könnte es in einem sauberen Ansatz geschrieben werden? Kann ich vielleicht die erforderlichen Bedingungen dynamisch generieren?
Es gibt einen Ausdruck, [Müll in Müll raus] (https://en.wikipedia.org/wiki/Garbage_in,_garbage_out). Ich denke, das könnte hier gelten, besonders wenn Sie nur Teile eines Datums zulassen. Konzentrieren Sie sich darauf, den Code zu ändern, in dem die Daten eingereicht werden (unabhängig davon, was dieser Eingabestream ist), und fügen Sie dort eine Validierung hinzu, um sicherzustellen, dass teilweise erforderliche Felder nicht zulässig sind (z. B. nur ein Monat eingeben, wenn ein ganzes Datum erwartet wird)? – Igor
Sie können Zuordnungen in einer XML-Datei erstellen und dann basierend auf dem Ergebnis dieser Zuordnung eine bestimmte Logik aufrufen. –