【问题标题】:CType in VB.NET with dynamic second parameter (type)带有动态第二个参数(类型)的 VB.NET 中的 CType
【发布时间】:2014-02-11 22:55:58
【问题描述】:

在 VB.NET 中,CType 可用于将一种类型转换为另一种类型。

CType(expression,type)

我将“表达式”存储在一个实例对象类中,比如"objExp"。 我将“类型”存储在 Type 类的实例中,比如"objType"

我正在尝试CType(objExp, objType) 我收到编译错误,我应该怎么做? “objType”在运行时被获取和分配。

【问题讨论】:

  • CType 用于告诉编译器对象是哪种类型,因此expressiontype 必须在编译时知道。但是,您会遇到什么错误?
  • 如果在运行时才知道结果,你会将结果存储在哪里?对于这种转换,您可以简单地依赖 System.Convert.ChangeType。这是另一个 XY 问题吗?
  • @TimSchmelter,错误是“未定义类型'objType'”

标签: .net vb.net casting


【解决方案1】:

您是否研究过CTypeDynamic() 方法?第二个参数(即:类型)可以动态设置。非常适合使用反射。

例如:

CTypeDynamic(strValueToConvert, objTypeToConvertTo)

【讨论】:

  • 好吧,出于一个原因,CTypeDynamic 的返回类型是Object,这很不幸,但显然是不可避免的。
  • 也许它在幕后装箱和拆箱,但它似乎工作。 Return CTypeDynamic(pString, GetType(T)) 我的返回类型是泛型 T。
  • 更好,通用的 CtypeDynamic Return CTypeDynamic(Of T)(pString)
【解决方案2】:

这根本不可能。 CType 表达式必须传递一个 Type 实例,该实例在编译时已知,例如 IntegerString 等...它不接受 Type 类型的值

【讨论】:

  • CTypeDynamic(Of T)(varA)
猜你喜欢
  • 1970-01-01
  • 2022-10-02
  • 2021-12-13
  • 2023-02-13
  • 2019-11-25
  • 1970-01-01
  • 2011-03-05
  • 2022-11-01
  • 1970-01-01
相关资源
最近更新 更多