使用 ParamArray,但需要至少一个参数

2024-01-23

我曾经拥有的:

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

第一个只是调用第二个{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

The <Obsolete()>第二个参数为的标签True通知编译器尝试使用标记的方法将导致编译错误。由于当且仅当尝试调用不带任何参数的方法时才会使用所讨论的方法,因此只有在这种情况下才会导致错误。请注意,如果尝试向方法传递以下内容的零元素数组,则不会使用该方法Integer;在这种情况下,正常的ParamArray将使用表格。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ParamArray,但需要至少一个参数 的相关文章

随机推荐

  • 如何使用node.js测试文件权限?

    如何检查正在运行的 Node js 进程对给定文件的权限 读 写 执行 我希望fs Stats object http nodejs org docs latest api fs html fs class fs stats有一些有关权限的
  • Django 外键值的精确匹配

    class Sentence Model name CharField class Tokens Model token CharField sentence ForeignKey Sentence related name tokens
  • 如何在 android 中模拟 Kotlin 对象?

    我在 kotlin 中有一个对象控制当前用户的会话信息 我想模拟有回调的登录方法 在测试时 我需要在 SessionController 对象中模拟此方法 object SessionController fun signIn userna
  • Java (J2SE) DTMF 音调检测

    我正在尝试执行以下操作 我正在使用我的 java 应用程序给另一个人打电话 已经完成并且工作正常 然后我正在播放录音 例如 请按 1 一继续英语 已经完成且工作正常 现在我想检测那个人按 1 根据我在 google 搜索中的研究 我发现这可
  • 如何在 Excel 中将 hhmmAM/PM(无空格)格式化为时间 hh:mm AM/PM?

    我正在开发一个薪资项目 为了提高数据输入效率 我希望以 hhmmAM PM 格式输入时间 没有空格或冒号 最好只输入 a p 而不是 AM PM 并将其转换为标准带有冒号和空格的时间格式 谢谢 这是一个为列编码的小宏A 可以对其进行修改以处
  • 增加火花任务大小[重复]

    这个问题在这里已经有答案了 当我在 Spark Shell 中执行代码时遇到问题 Stage 1 gt 0 0 16 17 01 13 06 09 24 WARN TaskSetManager Stage 1 contains a task
  • 如何处理“超出最大存储过程、函数、触发器或视图嵌套级别(限制 32)”。

    我被要求创建脚本 希望运行它的人提供员工 ID 找到所提供的员工任意深度监督的所有员工 我的代码是 CREATE FUNCTION dbo GetNames V uniqueidentifier RETURNS OldNames TABLE
  • 为什么 R 的重复数据在排序数据上表现更好?

    在比较答案中两个函数的效率时检查列表是否包含 R 中的另一个列表 https stackoverflow com a 39350733 4408538 我偶然发现了一个有趣的结果 排序大大提高了效率duplicated当向量很大时 这让我感
  • 在 PropertyGrid 中设置只读属性将所有属性设置为只读

    我正在使用一个PropertyGrid控件来编辑我的类属性 并且我尝试根据其他属性设置将某些属性设置为只读 这是我班级的代码 Imports System ComponentModel Imports System Reflection P
  • Redis 和 Node.js 以及 Socket.io 问题

    我刚刚学习 redis 和 node js 有两个问题我找不到任何令人满意的答案 我的第一个问题是关于在 Node js 中重用 Redis 客户端 我找到了这个问题和答案 如何在socket io中重用redis连接 https stac
  • 比较两个数组并找出差异

    我需要比较两个数组并获得差异 背景 第一个数组将列出文件夹中的文件 第二个数组将读取文件的内容并存储在数组中 第一个数组的输出将是 a b c d e 第二个数组的输出将是 a b c e 我如何比较这两个有差异的数组 我想要的最终输出是
  • java数组循环遍历

    我有一个包含 1 2 3 4 5 值的数组 array a 1 2 3 4 5 现在我想以循环方式遍历它 就像我想打印 2 3 4 5 1 或 3 4 5 1 2 或 5 1 2 3 4 等等 任何算法关于这个 Edit 我想以循环方式打印
  • 后台服务科尔多瓦离子应用程序。 Backgroudn 插件无法在 ios 8.3 上运行

    我想实现一个后台服务 将地理位置发送到服务器 因此我使用了插件 cordova plugin background modehttps github com katzer cordova plugin background mode htt
  • asyncio - 重新引发任务异常

    我正在使用 asyncio 进行一些 TCP 通信 我有一个Receive 函数的作用是read 无限循环中 这作为后台任务运行 使用asyncio create task Receive 现在 如果连接被对等方关闭 则会引发异常 或者可能
  • 增强数据结构而不浪费内存

    我有课Tree我想将其扩充为更专业的数据结构 例如Order tree and Interval tree 这些增强功能需要添加Node 例如大小信息 以及对某些算法的微小更改 我想知道在 C 中实现性能 可读性和可维护性方面的增强的最佳方
  • Quickbooks API - 如何使用存储的信用卡创建费用

    我想知道如何使用存储的信用卡创建费用 使用 card api 我已成功将卡存储在 QuickBooks Online 中并收到返回的卡 ID 现在我想对存储的卡进行收费 为了创建费用 我发现有两种提供卡详细信息的方法 提供明确的卡详细信息
  • 变换路径和重绘不起作用

    我有一次创建的路径 并向其中添加了 React 在某些情况下 我将路径偏移Path offset or Path transform 然后使我的画布无效以重新绘制路径 但路径并没有在新的地方重新绘制 我通过使用检查了路径边界Path com
  • 如何在通过curl触发构建时设置Jenkins构建描述?

    我正在尝试设置我正在触发的构建的构建描述 因为我正在启动构建 但到目前为止我还没有运气 我遇到了一个解决方案 将文本添加到 Jenkins 远程 API 触发的构建页面 https stackoverflow com questions 1
  • 在 Linq Select 中创建元组

    我正在使用 C 和 NET Framework 4 5 1 使用 Entity Framework 6 1 3 从 SQL Server 数据库检索数据 我有这个 codes codesRepo SearchFor predicate Se
  • 使用 ParamArray,但需要至少一个参数

    我曾经拥有的 Public Sub Subscribe channel As ChannelType Public Sub Subscribe channels As IEnumerable Of ChannelType 第一个只是调用第二