這是你的表情。
(
(
s.Id == r.Reserved.Id &&
(r.DateFrom < DateTime.Now || datumod2 == datumted2)
) &&
(r.DateTo > DateTime.Now || datumdo2 == datumted2)
) ||
(!r.Reserved.IsReserved)
正如你可以看到,當它不是全部擠在一條線,病情也時!r.Reserved.IsReserved
是真的是真的。現在
,設有一對夫婦混亂的括號,因此讓我們這些出來:
(
s.Id == r.Reserved.Id &&
(r.DateFrom < DateTime.Now || datumod2 == datumted2) &&
(r.DateTo > DateTime.Now || datumdo2 == datumted2)
) || !r.Reserved.IsReserved
和重組,以避免重複datumod2
檢查:
!r.Reserved.IsReserved ||
s.Id == r.Reserved.Id &&
(datumod2 == datumted2 ||
r.DateFrom < DateTime.Now && r.DateTo > DateTime.Now)
,也許使得這種擴展(語法可能是錯誤的,但你明白了):
public static bool IsInside<T : IComparable<T>>(this T x, T lower, T upper) {
return lower < x && x < upper;
}
爲:
!r.Reserved.IsReserved ||
s.Id == r.Reserved.Id &&
(datumod2 == datumted2 || DateTime.Now.IsInside(r.DateFrom, r.DateTo))
這很難說,在這一點上沒有上下文,但也許你會想要做一個函數:
private static bool SatisfiesCondition(Foo r, Bar s, Baz datumod2, Baz datumted2) {
if (!r.Reserved.IsReserved)
return true;
if (s.Id != r.Reserved.Id)
return false;
if (datumod2 == datumted2)
return true;
return DateTime.Now.IsInside(r.DateFrom, r.DateTo);
}
重排條件,並挑選最大可理解,瞧名稱:
if (SatisfiesCondition(r, s, datumod2, datumted2)) {
⋮
}
它具有拼寫出哪些值會影響條件的額外好處。
也許將它分解爲變量,因此它不是所有一個不可讀的行。 – Ryan
最後的|| (!r.Reserved.IsReserved)'忽略ID –
我認爲這是真的,因爲!r.Reserved.IsReserved是真的。 – Ben