Click here to Skip to main content
Click here to Skip to main content

Cheat Sheet - Casting in VB.NET and C#

By , 22 Sep 2003
 

Introduction

This article describes several casting and type related operations in VB.NET and C#.

Casting in VB.NET

  1. 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 behaviour can be influenced by an option line on top of your code file:

    Option Strict On
    Option Strict Off
    

    When on, casting is strict and not automatic.

  2. Explicit casting can be done with the cast operator CType() or DirectCast():

    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 CType. DirectCast throws an InvalidCastException error if the argument types do not match.

  3. Testing if an object is of a particular type, can be done with the TypeOf...Is operator:

    If TypeOf obj Is TextBox Then...
    
  4. Obtaining a System.Type object for a given type can be done with the GetType operator:

    Dim t As System.Type
    t = GetType(String)
    MessageBox.Show(t.FullName)
    
  5. Obtaining a System.Type object for a given object can be done with the GetType method:

    Dim t as System.Type
    t = obj.GetType()
    MessageBox.Show(t.FullName)
    

Casting in C#

  1. C# is a strictly typed language. Whenever types don't match, casting is necessary.

    Regular casting in C# follows the C(++) and Java syntax:

    string s = (string)obj;
    

    The casting operator applies to the complete chain on the right of it, so in the following example, not a, but a.b is casted to a Form:

    Form f = (Form)a.b;
    

    To cast parts of the chain, use brackets. In the following example, obj is casted to a Form:

    string s = ((Form)obj).Text;
  2. C# knows an additional casting operator: as.

    The as operator is like a cast except that it yields null on conversion failure instead of raising an exception. In the following situation, btn gets the value null:

    Object obj = new TextBox();
    Button btn = obj as Button;
    
  3. Testing if an object is of a particular type, can be done with the is operator:

    if (obj is TextBox) {...}
    
  4. Obtaining a System.Type object for a given type can be done with the typeof operator:

    System.Type t;
    t = typeof(String);
    MessageBox.Show(t.FullName);
    
  5. Obtaining a System.Type object for a given object can be done with the GetType method:

    System.Type t;
    t = obj.GetType();
    MessageBox.Show(t.FullName);
    

License

This article, along with any associated source code and files, is licensed under A Public Domain dedication

About the Author

Rudi Breedenraedt
Architect Wolters Kluwer Belgium
Belgium Belgium
Member
Rudi is a Software Architect at Wolters Kluwer Belgium.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralMy vote of 5memberHeaven202018 Mar '13 - 3:11 
GeneralMy vote of 4memberbatres-sc10 Mar '13 - 14:31 
GeneralMy vote of 5memberJGeZau22 Oct '12 - 8:19 
GeneralMy vote of 5memberMcwatt775 Oct '10 - 14:51 
GeneralMy vote of 4memberrichardhenwood13 Jul '10 - 22:30 
GeneralHimembermanchisrikanth10 Jun '10 - 2:22 
GeneralA note about asmemberWjousts24 Jul '09 - 4:16 
GeneralConverting VariablesmemberSashoJ29 Jun '09 - 7:32 
GeneralRe: Converting VariablesmemberWjousts24 Jul '09 - 4:15 
GeneralMissing a lotmemberJoshMouch25 Feb '07 - 14:27 
Generaldifference VB/C# in compile-time vs run-time errormemberAlexis Rzewski7 Feb '07 - 4:51 
QuestionHow about casting arraysmembereschneider10019 Mar '05 - 8:57 
AnswerRe: How about casting arraysmembercollinsauve7 Aug '08 - 3:28 
GeneralToStringmemberGeorge_Seremetidis28 Sep '04 - 13:40 
GeneralDon't Forget System.Convert.ChangeTypememberShaun Hayward29 Jun '04 - 7:35 
GeneralRe: Don't Forget System.Convert.ChangeTypememberskjagini6 Sep '05 - 2:56 
JokeRe: Don't Forget System.Convert.ChangeTypememberArtur M.7 Dec '06 - 21:45 
GeneralProblems with casting objectsmembersimbakid3 Mar '04 - 3:04 
I have a problem in my code with regard casting. I have a base class object called BaseDAO, a subclass is created from this called CustomerRowSet. I have a function which, through reflection, will create an instance of the subclass.

public static BaseDAO newInstance (DAOAssembly cAssembly, string strProviderID)
{
// lookup instance
BaseDAO cDAO = m_cManager.lookup(cAssembly, strProviderID);
 
if (cDAO != null)
{
Console.WriteLine("Created DAO Instance");
}
else
{
Console.WriteLine("Failed to create specified DAO handler");
}
 
// initialise instance
// TODO:
 
return cDAO;
}

 
I make a call to the newInstance function and test the type of the returned object, thus:
 

DAOAssembly x = new DAOAssembly("DAOTest.dll", "d:", "ds.xml", "d:", "TEST");
Object o = CustomerRowSet.newInstance(x, "SELECT_CUSTOMERS");
if (o is DAOTest.CustomerRowSet)
{
Console.WriteLine("Object is of correct type");
}
else
{
System.Type t;
t = o.GetType();
Console.WriteLine(t.FullName);
}

 
Upon return, execution branches into the else statement and not the if statement, but the output from code is:
 

Created DAO Instance
DAOTest.CustomerRowSet

 
This shows that the returned object is of the correct type yet doesn't execute the if branch of the code. In addition, if I try the following code:
 

CustomerRowSet rs = (CustomerRowSet)CustomerRowSet.newInstance(x, "SELECT_CUSTOMERS");

 
I get an InvalidCastException.
 
Grateful for any suggestions or information, many thanks in advance.
 
Chris.

QuestionDifference between DirectCast and Ctype?memberFruitBatInShades26 Jan '04 - 5:36 
GeneralPlease add pointers to the next update!sussAnonymous4 Oct '03 - 13:20 
GeneralOK, but could be bettersussDavid Bennett30 Sep '03 - 4:23 
GeneralInformativeeditorNishant S23 Sep '03 - 20:14 
GeneralCommentsmemberNick Seng23 Sep '03 - 15:21 
GeneralGoodmemberdog_spawn23 Sep '03 - 13:14 
GeneralRe: GoodmemberFurty23 Sep '03 - 13:36 
GeneralRe: Goodmemberdog_spawn24 Sep '03 - 6:34 
GeneralRe: GoodmemberRudi Breedenraedt25 Sep '03 - 5:22 
GeneralRe: Goodmemberdog_spawn25 Sep '03 - 6:52 
GeneralRe: Goodmemberpeterchen29 Sep '03 - 6:29 
GeneralRe: Goodmemberdog_spawn29 Sep '03 - 6:34 
GeneralRe: Goodmemberpeterchen29 Sep '03 - 11:19 
GeneralRe: Goodmemberdog_spawn29 Sep '03 - 11:23 
GeneralRe: Goodmemberpeterchen29 Sep '03 - 12:26 
GeneralRe: Goodmemberdog_spawn29 Sep '03 - 13:53 
GeneralRe: GoodmemberRocky Moore23 Sep '03 - 14:14 
GeneralRe: GoodmemberAttila Hajdrik25 Sep '03 - 21:27 
GeneralRe: Goodmemberrj4524 Apr '04 - 21:07 
GeneralRe: GoodmemberNgraham26 May '04 - 4:32 
GeneralRe: GoodmemberDBuckner26 May '04 - 18:57 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web01 | 2.6.130516.1 | Last Updated 23 Sep 2003
Article Copyright 2003 by Rudi Breedenraedt
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid