C#是否支持在非匿名方法的参数中使用弃元赋值?
非匿名方法中使用C#弃元参数的可行性
在匿名方法订阅事件时,弃元赋值的写法非常实用,比如:
Loaded += (_, _) => { /* 无需使用sender或args的逻辑 */ }
但如果要把这段逻辑转为非匿名方法,就没法直接沿用这种写法:
private void OnLoaded(_, _) // CS0246: 找不到类型或命名空间“_” private void OnLoaded(object _, EventArgs _) // CS0100: 参数名称“_”重复
当方法需要满足接口契约但又用不上全部传入参数时,弃元参数的需求会更突出(虽然有人会认为这种场景是接口设计的问题,但实际开发中我们时常不得不使用或修改他人的代码)。
常见的替代方案是给参数加后缀区分,比如:
private void OnLoaded(object _, EventArgs _2)
但这种写法存在隐患——如果有人在方法内误操作修改了_变量,会引发不必要的问题。更稳妥的写法是给参数加上明确的命名:
private void OnLoaded(object _sender, EventArgs _args)
这种写法能通过多数代码分析工具的检查,避免未使用参数的警告,但略显繁琐,还可能因命名不当导致字段被遮蔽的问题。
结论
目前没有任何C#版本支持在非匿名方法中完全使用弃元参数。C#的方法参数要求名称唯一,且不能仅用_作为重复参数名;同时,_也不能直接作为参数类型使用。弃元语法仅在匿名方法、lambda表达式、解构赋值等场景中被支持,非匿名方法必须遵循常规的参数命名规则。
内容的提问来源于stack exchange,提问作者Josh Brunton
相关产品推荐
相关产品推荐

