簡體   English   中英

通用Func <>中的可選參數

[英]Optional arguments in a generic Func<>

我在程序集中具有以下方法:

public string dostuff(string foo, object bar = null) { /* ... */ }

我將其用作回調,因此對它的引用將傳遞給另一個程序集,例如:

Func<string, object, string> dostuff

現在以原始形式,無需指定第二個參數即可調用它,該參數默認為null 但是,當我將它用作第二個程序集中的回調時,必須指定第二個參數。

什么語法允許我忽略第二個參數?

您需要創建一個新方法,該方法僅接受一個參數,並傳遞第二個參數的默認值。 如果需要,您可以使用lambda來執行此操作,而不是創建一個新的命名方法:

Func<string, string> doStuffDelegate = s => dostuff(s);

另一種選擇是使用簽名具有可選的第二個參數的委托,而不是使用Func ,在這種情況下,方法的簽名將匹配:

public delegate string Foo(string foo, object bar = null);

您可以直接將dostuff分配給Foo類型的委托,並且在調用該委托時只能指定一個參數。

您不能這樣做,僅僅是因為可選參數是語法糖,並且僅當您直接調用該方法時才可以使用。 當您像這樣調用方法時:

dostuff(foo);

編譯器將其轉換為:

dostuff(foo, null);

在其他情況下,例如使用不接受可選參數的delegate ,或使用反射調用此方法時,您必須提供可選參數。

暫無
暫無

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

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