Source: Cheat Sheet - Casting in VB.NET and C#
Great little find, and since I’m a VB.Net whore, I’ll just post up the VB.Net version :)
Casting in VB.NET
By default in VB, casting is automatically done for you when you assign objects to variables. The objects are then automatically casted to the variables' type.
This behavior can be influenced by an option line on top of your code file:
Option Strict OnOption Strict Off
When on, casting is strict and not automatic.
Explicit casting can be done with the cast operator
textbox = CType(obj, TextBox)textbox = DirectCast(obj, TextBox)
The difference between the two keywords is that
CType succeeds as long as there is a valid conversion defined between the expression and the type, whereas
DirectCast requires the run-time type of an object variable to be the same as the specified type. If the specified type and the run-time type of the expression are the same, however, the run-time performance of
DirectCast is better than that of
DirectCast throws an
InvalidCastException error if the argument types do not match.
Testing if an object is of a particular type, can be done with the
If TypeOf obj Is TextBox Then...
System.Type object for a given type can be done with the
Dim t As System.Typet = GetType(String)MessageBox.Show(t.FullName)
System.Type object for a given object can be done with the
Dim t as System.Typet = obj.GetType()MessageBox.Show(t.FullName)
Now to build on and add one more of my own…
Get the type based on an arbitrary string.
Problem with this though is you can not use it to cast using CType or DirectCast. Looking at the CType Function..
typename - Any expression that is legal within an As clause in a Dim statement, that is, the name of any data type, object, structure, class, or interface.
You can only use types that are compiled and can’t use types that show up at runtime. So trying to use CType(obj, System.Type.GetType(“System.String”)) will only get you an error. Array bounds cannot appear in type specifiers.
How to get around this? I have no freaking idea, yet. I’m think I might could create a custom type of my own and do something so that it converts to the proper method but for now I’ll just catch a few ArgumentExceptions and try different cast types then.