VB.NET中Func/Action类型可选参数能否设置非Nothing默认值
问题解答
该需求完全可以实现,且支持内联编写默认值,不需要用Nothing做兜底判断。
VB.NET编译器原生支持把匹配委托签名的无状态Lambda表达式直接作为Func/Action类型可选参数的默认值,编译阶段会把这个Lambda转换成静态缓存的委托实例,运行时调用不会有空引用问题。
针对你要设置始终返回True的默认函数的场景,正确代码如下:
Private _value As Boolean Public Sub SetValue(Optional getValue As Func(Of Boolean) = Function() True) _value = getValue() End Sub
调用效果
- 直接无参调用
SetValue()时,会走默认的内联委托逻辑,_value会被赋值为True - 传入自定义的
Func(Of Boolean)委托调用时,会执行你传入的自定义逻辑,默认值不会生效
注意点
写内联默认值的时候要保证Lambda签名和目标委托完全匹配:比如示例里的Func(Of Boolean)是无入参、返回布尔值的委托,所以内联写的Function() True不能额外加参数,返回值也必须是布尔类型,否则会直接报编译错误。
内容的提问来源于stack exchange,提问作者Thomas Drake
相关产品推荐
相关产品推荐

