Я уверен, что где-то есть ответ на этот вопрос, но я явно использую неправильную терминологию в своих поисках, поэтому заранее прошу прощения за то, что это неизбежно будет дубликатом.
Возьмите функцию CType. Ясно, что я могу привести (или хотя бы попробовать) данный объект к указанному ссылочному типу. Функция не будет работать при попытке привести к структуре, т.е.
CType(myObject, Integer)
... приведет к ошибке компилятора. Это, я уверен, чаще всего возникает при работе с генериками:
Public Function GetResults(Of T)() As T
Dim instance As T
Return CType(GetData(instance), T)
End Function
Public Function GetData(ByVal param As myClass) As myClass
'do stuff
Return param
End Function
Public Function GetData(byval param As Integer) As Integer
'do stuff
Return param
End Function
Public Function GetResults(ByVal param As Object) As Object
Throw New NotImplementedException
End Function
Вероятно, не лучший из примеров, но, надеюсь, показывает, что я имею в виду. Будет работать следующее:
Dim result = GetResult(Of myClass)
Следующее не удастся на CType
Dim result = GetResult(Of Integer)
Я не большой поклонник использования исключений / Try-Catch, если можно применить логику, поэтому, хотя я мог бы попробовать Try-Catch CType, я бы лучше нашел способ направить его через другой код. Я знаю, с Generics я могу использовать
Public Function GetResults(Of T As Structure) As T
Что противоположно? Мне нужны только ссылочные типы, чтобы CType не работал ... Я не могу перегрузить T As Structure простой T , потому что он считает их идентичными сигнатурами, поэтому, безусловно, есть ключевое слово я где-то пропустил? ^^
Длинный вопрос, вероятно, требуется только одно слово ответа (извините) ... Заранее спасибо!