實在看不懂MSDN關於 Any 的解釋。

2022-01-14 04:54:28 字數 2600 閱讀 4587

enumerable.any<

tsource

>方法 (ienumerable<

tsource

>, func<

tsource, boolean>)

傳送反饋

確定序列中的任何元素是否都滿足條件。

命名空間:system.linq

程式集:system.core(在 system.core.dll 中)

語法型別引數

tsource

source 中的元素的型別。

引數source

型別: system.collections.generic.ienumerable 

<

tsource

>

乙個 ienumerable

,其元素將應用謂詞。

predicate

型別: system.func 

<

tsource, boolean

>

用於測試每個元素是否滿足條件的函式。

返回值型別: system.boolean 

如果源序列中的任何元素都通過指定謂詞中的測試,則為 true;否則為 false。

使用說明

在 visual basic 和 c# 中,可以在 ienumerable

<

tsource

>型別的任何物件上將此方法作為例項方法來呼叫。當使用例項方法語法呼叫此方法時,請省略第乙個引數。有關更多資訊,請參見 擴充套件方法 (visual basic)或 擴充套件方法(c# 程式設計指南)。

備註說明

此方法不返回集合的任何乙個元素。而是確定集合的任何元素是否滿足某一條件。

一旦可確定結果,則停止列舉 source。

以上是msdn的備註,一直用all,在思想上,已向 all 靠攏。all的理解是: 進行遍歷, **返回 false 則停止遍歷 。 返回值 = 最後**的返回值(序列為空,返回true)。基本上用all 可以實現 any 所有的事。

但它們返回值和執行機制不同, any 不延遲執行。 而all 是延遲執行的。 (它們都是即時執行)

現在說說msdn的解釋,仔細讀讀any的msdn解釋,就發現它有多麼不可理解。

1. 確定序列中的任何元素是否都滿足條件。

上面說的不是人話,是計算機話,人理解需要解讀: 如果返回 true , 表示 序列中的所有元素全部滿足條件 。  如果返回false,表示序列中存在不滿足條件的元素。

誤讀:返回true,表示序列中的所有元素全部滿足條件。 如果返回false,表示序列中的元素全部不滿足條件 。那,部分滿足,部分不滿足,又如何呢? 自己跟自己說不通。

2. predicate 

用於測試每個元素是否滿足條件的函式。

解讀:嗯。如果返回true,表示該元素滿足條件, 如果返回false,表示該元素不滿足條件 。

根據1 的理解, 返回true,要繼續執行。 返回false 要停止執行。

3. 返回值: 如果源序列中的任何元素都通過指定謂詞中的測試,則為 

true

;否則為 

false

解讀: 如果**全部返回true,則返回true, 否則返回false。 根據 2的理解,返回乙個 false 就要停止 ,所以,它返回的還是最後一次**返回值。

4.最後一句, 一旦可確定結果,則停止列舉 

source

。解讀: 一旦確定true結果,則停止列舉srouce 。

誤讀: 一旦確定 false 結果,是不是也算是確定結果?!!! 那豈不成了只判斷第乙個了嗎。 自己跟自己又說不通。

理解上的衝突出現了,就在於 「任何」 這兩個字上。 查查詞典:    裡面的有英語單詞的翻譯: 任何= any.  很明顯的,翻譯濫用了」任何「

舉兩個」任何「的例子來理解:  如 "任何人不得入內「,」任何人都可以進來「 。

經**驗證,上面的理解,2,4  是正確的。

string str = new

string ;

var d = str.any(o =>);

console.writeline(d);

上面輸出:

aabc

true

正確對any的理解: 進行遍歷,**返回 true 即停止遍歷,返回值=最後**的返回值(序列為空,返回 false)

對比all,確認,all 可以做 any 的任何事情。 下面分析濫用行為:

濫用1: 確定序列中的任何元素是否都滿足條件。

可能是機器翻譯的結果。 應該是  確定序列中是否存在滿足條件的任一元素。

濫用2:返回值: 如果源序列中的任何元素都通過指定謂詞中的測試,則為 true;否則為 false

有任何乙個通過,就停止遍歷, 何談任何元素通過測試?  應該是: 如果有任一元素通過測試,則為true,否則為false。

這也是大家對msdn的linq,弄不明白的地方之一,看msdn看不明白,總是通過其它開發者的解讀和測試來達到自己的理解的原因。

別人看不懂的悲傷

再一次坐在電腦前寫下那些蒼涼的文字。字字離不開悲傷。句句離不開頹廢。雖然今天應該開心。但是心裡偶爾還是會隱隱做痛。似乎永遠都重複著兩個字。悲傷。疼痛在心裡衍生如花。燦爛的風景裡妳是我不能觸踫的乙個記憶。卻總在心裡盤旋不去。狠心的告訴自己要記得相忘。就這樣轉身走進煙雨。即便失了歸途。心裡其實也知道。愛...

jquery ui中看不懂的 ul paused

html源 js源 document ready function 1000 function 1000 h1 click function this toggleclass highlighted slow easeinexpo 疑問 ul paused 是什麼?在用瀏覽器開啟index.html...

redis裡append的用法(看不懂)

key value 時間複雜度 o 1 均攤時間複雜度是o 1 因為redis用的動態字串的庫在每次分配空間的時候會增加一倍的可用空閒空間,所以在新增的value較小而且已經存在的 value是任意大小的情況下,均攤時間複雜度是o 1 在節拍序列裡,可以很容易地訪問序列中的每個元素 strlen 可...