簡體   English   中英

在c#中沒有參數的方法仍然是一種方法?

[英]Method with no parameters in c# and still a method?

我要做的就是檢查列表B中的所有元素是否都在列表A中

        if (listA.All(element => listB.Contains(element))
        {
            return;
        }

有人想出了另一個解決方案,說這會起作用並且有效!

       if (listA.All(listB.Contains))
            return;

現在,(我知道它有效),

  1. 為什么編譯器在第二種方法中不需要a()near contains?
  2. 如果在將來,比方說,我希望這比較不區分大小寫,我將如何使用第二種方法?

提前致謝。

All方法請求謂詞作為參數: Func<T, bool>其中T是相同的類型是List<T> 此代碼有效,因為它提供了這樣的方法。 All方法將返回一個值,該值指示在列表中的每個項上調用提供的謂詞的結果是否為true 該參數是對Contains方法的引用 ,該方法匹配所需的Func<T, bool> ,獲取單個參數T並返回bool

考慮以下兩行代碼:

Func<string, bool> predicate1 = s => s.Length > 5;
Func<string, bool> predicate2 = listB.Contains;

這兩行都有效,因為賦值運算符右側的表達式求值為采用單個string參數的方法,並返回bool 您可以將predicate1predicate2傳遞給All方法。 它與您提供的代碼相同,只是謂詞是直接傳遞的,而不是先存儲在變量中,而是傳入變量。

但實際上並沒有將Contains方法作為參數調用。 它僅由All方法在內部調用。

如果您想進行不區分大小寫的搜索, 使用與上面相同的語法,則需要一個執行不區分大小寫搜索的方法。 您可以隨時使用自定義匿名方法:

listA.All(x => listB.Any(
    z => string.Equals(x, z, StringComparison.OrdinalIgnoreCase)));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM