Кастинг в VB.NET

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
14
задан Peter Mortensen 8 January 2015 в 17:04
поделиться

5 ответов

Несомненно, но myvalue должен будет быть определен с типа Object, и Вы не обязательно хотите это. Возможно, это - случай, лучше подаваемый дженериками.

, Что определяет, какой тип будет использоваться?

7
ответ дан 1 December 2019 в 10:05
поделиться

Это - самый короткий способ сделать это. Я протестировал его с несколькими типами.

Sub DoCast(ByVal something As Object)

    Dim newSomething = Convert.ChangeType(something, something.GetType())

End Sub
5
ответ дан 1 December 2019 в 10:05
поделиться
 Dim bMyValue As Boolean
 Dim iMyValue As Integer
 Dim sMyValue As String 
 Dim t As Type = myValue.GetType


 Select Case t.Name
     Case "String"
        sMyValue = ctype(myValue, string)
     Case "Boolean"
        bMyValue = ctype(myValue, boolean)
     Case "Integer"
        iMyValue = ctype(myValue, Integer)
 End Select

Это - немного hacky, но это работает.

9
ответ дан 1 December 2019 в 10:05
поделиться

Возможно, вместо того, чтобы динамично бросить что-то (который, кажется, не работает) Вы могли использовать отражение вместо этого. Достаточно легко получить и вызвать определенные методы или свойства.

Dim t As Type = testObject.GetType()
Dim prop As PropertyInfo = t.GetProperty("propertyName")
Dim gmi As MethodInfo = prop.GetGetMethod()
gmi.Invoke(testObject, Nothing)

Это не симпатично, но Вы могли сделать часть этого в одной строке вместо так многих.

2
ответ дан 1 December 2019 в 10:05
поделиться

Ну, как Вы определяете, какой тип требуется? Как Joel сказал, это - вероятно, случай для дженериков. Вещь: так как Вы не знаете тип во время компиляции, Вы не можете рассматривать значение, возвращенное так или иначе настолько бросающий, действительно не имеет смысла здесь.

4
ответ дан 1 December 2019 в 10:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: