我有這樣的foreach循環:與重構如果一個foreach - 否則,如果結構LINQ
var includedElements = new HashSet<int>();
foreach(var e in elements)
{
var include = false;
if(isTable(e.Key))
{
if(tables.ContainsKey(e.Key)
{
if(tables[e.Key].Elements
.Any(subElem => shouldBeIncluded(subElem.Key)))
{
include = true;
}
}
}
else if(shouldBeIncluded(e.Key))
{
include = true;
}
if(include){
includedElements.Add(e.Key);
DoSomeMoreStuff(e);
}
}
我試圖重構這對LINQ:
var query =
from e in elements
where
(
isTable(e.Key)
&& tables.ContainsKey(e.Key)
&& tables[e.Key].Elements
.Any(subElem => shouldBeIncluded(subElem.Key))
) || (
!isTable(e.Key)
&& shouldBeIncluded(e.Key)
)
select e;
foreach(e in query){
includedElements.Add(e.Key);
DoSomeMoreStuff(e);
}
我不知道怎麼樣這裏是或子句。在我的腦海中,我需要包含!isTable(e.Key)
來處理外部結構。
我是否正確地對待我的重構?這兩個代碼示例是否導致相同的邏輯功能?
難道只有一次致電isTable
我可以逃脫嗎?因爲我現在有了它,所以我需要在||
的另一側將它翻轉。
太好了。儘管對'isTable'的檢查沒有什麼特別之處,但它仍然是一個調用來檢查它是否存在於字典中,如果字典很大,這可能會很昂貴。您的解決方案正是我所需要的。 – awe