我目前使用是否有與LINQ的所有方法相反的東西?
a_list.All(item => !(item.field_is_true == true))
效果很好,但我想知道是否有一個合適的LINQ方法來完成所有的對立面。
我目前使用是否有與LINQ的所有方法相反的東西?
a_list.All(item => !(item.field_is_true == true))
效果很好,但我想知道是否有一個合適的LINQ方法來完成所有的對立面。
All()檢查給定謂詞對所有項目返回true。在框架開發方面,編寫一個獨立的方法檢查給定的Predicate是否爲所有項返回false是沒有意義的,因爲它非常容易「不」謂詞。 但是,您可以編寫自己的擴展方法:
public static bool None<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
return !source.Any(predicate);
}
你也可以使用'Func
與All()
完全相反,本質上是None
,但由於LINQ沒有None()
方法,您可以通過!set.Any()
完成相同的結果。
!a_list.Any(item => !(item.matches == true))
這將產生true
如果沒有中的a_list的項目有一個matches
值是不正確的。
這雙重否定是有點混亂,所以要提供一個簡單的例子:
names.All(item => item.StartsWith("R"))
爲真,如果在names
開始與R中的項目的所有(因爲你已經知道了)。
!names.Any(item => item.StartsWith("R"))
如果沒有在names
啓動的項目與R.
根據您在下面的評論中,這聽起來是真的喜歡你可能只是在尋找一種方式來完成相同的結果,您的目前的代碼片段,但以不同的方式。這應該提供相同的結果作爲當前的代碼,但沒有!
於斷言:
!a_list.Any(item => item.matches == true)
這可以進一步簡化爲:
!a_list.Any(item => item.matches)
我想像你可以和簡化,這樣:
a_list.All(item => !item.matches)
有很少一個很好的理由,明確比較true
或false
一個布爾值。
假設'.matches'總是'true',你不會只想要第二個'!',沒有第一個? – TankorSmash
@TankorSmash我不確定。你還沒有完全解釋你想做什麼。我給你的例子完全相反。你想要確定什麼,具體是什麼? – JLRishe
而不是否定所有的()條件下,只需將任何()與同謂語使用並進行適當處理返回boolean值。
因此,而不是:
bool conditionDoesntExist = a_list.All(item => !(item.field_is_true == true));
你可以有
bool conditionDoesExist = a_list.Any(item => item.field_is_true == true)
注意的標誌名稱的變化。 (當然,我忽略了像原始謂詞可能被寫爲item => item.field_is_true == false
或簡單地item => !item.field_is_true
)的語義材料。
如果你想守旗的名字一樣,那麼仍然使用的任何(),但否定它:
bool conditionDoesntExist = !a_list.Any(item => item.field_is_true == true);
當使用** linq來對象**時,不應該存在性能差異。請參閱[鏈接](http://stackoverflow.com/a/9027666/1219182) –
你寫道:
a_list.All(item => !(item.field_is_true == true))
就是喜歡這樣做:
a_list.All(item => item.flag== false) // more readable to me...
//return true if all of the items have a **flase** value on their flag
您還可以使用.any()實現相同的結果:
!a_list.Any(item => item.flag==true)
爲性能自動問題:.ANY() VS 。所有() - 都將具有相同的性能 (使用LINQ到對象時),找到更多的在這裏:LINQ: Not Any vs All Don't
它會被稱爲無? –
@JonathanWood LINQ沒有'None()'方法。 – JLRishe
我知道,但寫一個會很簡單。只需返回一個空集。我的觀點是,不是無所有相反嗎? –