vb.net - 试图在函数头中使用类型类型的变量 - 包含类型
问题描述
我知道很多问题是相似的,但可能是因为很多问题都与 C# 有关,我无法轻松地将其转换为 VB.Net,因此我无法在任何地方找到以下方法。函数Test获取一个参数TypToValidate ,该参数指定要检查的类型。
函数中的代码将一行中的一段从文本中读取到一个字符串变量中。根据读取的内容,该字符串可能是“abc”或“0.307”或“12”或其他任何内容。然后该函数必须检查该字符串是否可以转换为TypeToValidate指定的类型。如果是这样,该函数将经过验证的文本块作为字符串返回;如果不是,它会引发错误。
Function Test(... , Optional ByVal TypeToValidate as Type = String) as String
ChunkOfText = SomeFile.ReadLine
If TypeOf(ChunkOfText) Is TypeToValidate Then
Return ChunkOfText
Else
Throw ex As ApplicationException ' or whatever like this
End If
...
我知道“类型”本身不能用作类型,类型的类型,将类型作为值。Iow,我不能将类型传递给函数,或者可以吗?
显然,我可以使用
Function Test(..., Optional ByVal TypeToValidate as String = "String") as String
并将String(如 'Byte', 'Integer', 'Int32', ...)传递给函数而不是Type,但这似乎不太专业......并且允许出错。任何帮助,最好是在 VB.Net 中?
解决方案
我认为可选参数在这里不起作用,因为它必须使用常量表达式进行初始化。
一个类型的变量Type
必须与另一个类型Type
的表达式进行比较=
。这只是测试两个值是否相等。
Function Test(someVar As Object, typeToValidate As Type) As Boolean
Return someVar?.GetType() = typeToValidate
End Function
.GetType()
应用于变量获取Type
描述对象的运行时类型的对象。
(我在这里使用了一个空条件运算符,以防值为Nothing
。)
另一种可能性是使用泛型函数并使用类型名称(作为标识符给出,而不是字符串)或泛型类型参数进行TypeOf someVar Is T
测试。T
Function Test(Of T)(someVar As Object) As Boolean
Return TypeOf someVar Is T
End Function
然后,我们可以用
Dim obj As Object
obj = "Hello"
If Test(Of String)(obj) Then
Console.WriteLine("obj is a String")
End If
还要注意,写类似的东西没有意义
If someCondition Then
Return True
Else
Return False
End If
someCondition
(可以是任何布尔表达式)已经产生了值True
or False
。因此,您可以简单地将其返回
Return someCondition
推荐阅读
- java - Eclipse - 以编程方式突出显示编辑器的多行
- javascript - 为什么 Javascript 以这种方式工作?
- class - Making a Kotlin Function Accept a String as an Object Reference
- amazon-s3 - 如何在白色背景上显示 S3 对象 url 而不是默认的黑色
- php - php数组合并没有给出预期/期望的结果
- reactjs - 无法使用 React 在 graphql 查询中显示数组中的值
- microsoft-translator - 使用自定义引擎传递错误参数时,Microsoft Translator Text 不会引发错误
- ios - iOS:将 Firebase InAppMessaging 与 Cordova 项目集成
- facebook - 我收到错误(#10)“此消息在允许的窗口之外发送”,当发送带有按钮的消息以在 Facebook Messenger 中打开 web 视图时
- r - 如何在 ggplot2::label_parsed 的 plotmath 中包含美元符号