gpt4 book ai didi

vb.net - 使用 ParamArray,但至少需要一个参数

转载 作者:行者123 更新时间:2023-12-04 16:29:28 25 4
gpt4 key购买 nike

我曾经拥有的:

Public Sub Subscribe(channel As ChannelType)
Public Sub Subscribe(channels As IEnumerable(Of ChannelType))

第一个只是用 {channel} 调用第二个将其参数转换为数组。

我认为必须创建一个 channel 列表来传递给该方法是很尴尬的,并选择将两个重载组合到一个采用 ParamArray 的方法中。 .
Public Sub Subscribe(ParamArray channels() As ChannelType)

'Usage
Subscribe(ChannelType.News)
Subscribe(ChannelType.News, ChannelType.Sports)
Subscribe() 'Oops... this is valid

这里的“最佳实践”是什么?我喜欢 ParamArray 的灵活性让我只是让人们传递东西,但它无法通过编译器错误反馈帮助开发人员“更快地失败”......这意味着类似于 ArgumentException在这里是不可能的,因为使用这种方法的人可能不会编写任何单元测试。一种选择是以下...
Public Sub Subscribe(channel As ChannelType)
Public Sub Subscribe(channel As ChannelType, ParamArray channels() As ChannelType)

但我觉得这让我几乎回到了原点,令人困惑,并且要求我实现该方法不那么直接。

最佳答案

另一个要考虑的选择是

Module ParamArrayTest
Sub ShowThings(ParamArray MyThings() As Integer)
For Each thing As Integer In MyThings
Debug.Print("{0}", thing)
Next
End Sub

' Don't try to call without parameters:
<Obsolete("Must have at least one parameter", True)> Sub ShowThings()
Throw New ArgumentException("Must specify at least one parameter")
End Sub

Sub Test()
ShowThings(3, 4, 5)
ShowThings()
End Sub
End Module
<Obsolete()>带有第二个参数 True 的标签通知编译器尝试使用标记的方法会导致编译错误。由于将在且仅当尝试不带任何参数调用该方法时使用所讨论的方法,因此仅在这种情况下才会导致错误。请注意,如果尝试将 Integer 的零元素数组传递给该方法,则不会使用该方法。 ;在那种情况下,正常 ParamArray形式将被使用。

关于vb.net - 使用 ParamArray,但至少需要一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12806267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com