【发布时间】:2012-01-18 11:22:15
【问题描述】:
考虑以下代码,它只是一个从 Long (Int64) 自定义扩展转换的类。
Public Class CharacterArgs
Private _CharacterID As Long
Public ReadOnly Property CharacterID() As Long
Get
Return _CharacterID
End Get
End Property
Public Sub New(ByVal characterID As Long)
_CharacterID = characterID
End Sub
Public Sub New()
End Sub
Overloads Shared Widening Operator CType(ByVal source As Long) As CharacterArgs
Return New CharacterArgs(source)
End Operator
End Class
以下代码有效:
Dim test As CharacterArgs
test = 10
但是:
Dim canAssign = GetType(CharacterArgs).IsAssignableFrom(GetType(Long)) 'False
Dim convertTest = Convert.ChangeType(10L, GetType(CharacterArgs))
'Throws InvalidCastException
所以我的问题:
- 是否有支持自定义转换,但也接受目标类型为
System.Type对象(而不是CType)的转换/转换方法? - 是否有类似于
IsAssignableFrom的反射或强制转换“测试”方法也可以解释自定义转换?
【问题讨论】:
标签: .net vb.net casting type-conversion