首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证ParamArray包含正确类型的参数

验证ParamArray包含正确类型的参数
EN

Stack Overflow用户
提问于 2018-06-14 20:32:17
回答 2查看 153关注 0票数 2

我试图使用ParamArray将不同类型的参数传递给同一个函数,以模拟函数重载。

  • 一台String
  • 一个Workbook对象,一个String以及一个Integer

因此,用户可以向同一个函数传递不同的参数:

Function func(ParamArray params() As Variant)

blah = func("This is a string")

blah = func(wbSource, "SheetName", iRow)

是否有方法验证参数的类型?我需要确保params()包含正确类型的参数(一个workbook、一个string和一个integer)。

当然,我可以用一堆If-Else编写硬代码,但是如果将来会有更多的争论呢?我正在考虑使用TypeName()将类型转储到String数组,然后进行比较。但这似乎仍然很麻烦。是否有更好的方法来实现这一点?

顺便说一句,我不认为Optional是个好主意,因为谁知道会有多少争论呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-14 20:45:42

我试图使用ParamArray将不同类型的参数传递给同一个函数,以模拟函数重载。

IMO,这是个糟糕的主意:您失去了对参数计数的编译时检查,在呼叫站点上丢失了告诉您预期参数和类型的intellisense。

C#从方法重载开始,发展到支持可选参数。现在支持可选参数,在C#中,方法重载只是可选参数的一种选择,反之亦然。

VBA支持可选参数,但不支持方法重载。重要的是:您可以使用可选的参数并实现与C#替代方法重载完全相同的功能。

ParamArray不是一种选择。

“是否有方法验证参数的类型”的答案是-是的!让编译器完成它的工作!

我不认为Optional是个好主意,因为谁知道会有多少争论呢?

如果你不知道,没人知道!一个有太多参数的方法通常是一种代码气味:方法对太多的事情负责吗?这个名字能准确地传达它所做的一切吗?很难用您提供的内容来判断,但我认为,如果您正在编写一个方法,而您不知道它需要多少参数,您如何知道该方法需要做什么?

票数 3
EN

Stack Overflow用户

发布于 2018-06-14 20:40:26

我想你在问题中回答了你自己的问题。您需要使用数组来存储哪些类型对您有效,并检查类型是否在其中。您可以使用TypeName(),或者使用VarType(),正如Mathieu Guindon在注释部分中解释的那样。示例:

代码语言:javascript
复制
Dim IntVar, StrVar, DateVar, MyCheck
' Initialize variables.
IntVar = 459: StrVar = "Hello World": DateVar = #2/12/69# 
MyCheck = VarType(IntVar)    ' Returns 2.
MyCheck = VarType(DateVar)    ' Returns 7.
MyCheck = VarType(StrVar)    ' Returns 8.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50865495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档