簡體   English   中英

泛型謂詞的默認值作為參數

[英]Default value on generic predicate as argument

第一次問我:)

我需要一些方法來定義使用格式的泛型的默認謂詞

Func<T, bool>

然后將其用作默認參數。 像這樣的東西:

public bool Broadcast(byte command, MemoryStream data, bool async, Func<T, bool> predicate = (T t) => true)

當我這樣做時,我得到編譯錯誤:

'predicate'的默認參數值必須是編譯時常量

有沒有一種順利的方法可以做到這一點,我缺少或應該使謂詞函數可以為空並相應地改變我的函數邏輯?

謝謝,

方法參數的默認值必須是編譯時常量,因為默認值實際上是由編譯器復制到方法的所有調用站點。

您必須使用重載來執行此操作:

public bool Broadcast(byte command, MemoryStream data, bool async) {
    return Broadcast(command, data, async, t => true);
}

public bool Broadcast(byte command, MemoryStream data, bool async, Func<T, bool> predicate) {
    // ...
}

此外,mscorlib中有一個特定的Predicate<T>委托,您可以使用它。 它與Func<T, bool>具有相同的簽名,但它明確地將其標記為委托,該委托決定是否對T實例執行操作

對沒有最后一個參數的Broadcast進行重載。

嘗試這個:

public bool Broadcast(byte command, MemoryStream data, bool async, Func<T, bool> predicate = default(Func<T, bool>))

但我認為你必須檢查謂詞!= null。

暫無
暫無

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

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