Introduction
Type casting is one of the unavoidable things in software development. In many
situations we need to convert one object (Type) to another object (Type) and some times we get an exception like this: "Cannot implicitly convert type 'Object one' to 'object two'". To avoid this type of exceptions and check object compatibility, C# provides two operators namely is
and as
.
is
operator
The is
operator in C# is used to check the object type and it returns a bool
value: true if the object is the same type and
false if not.
For null
objects, it returns false
.
Syntax:
bool isobject = (Object is Type);
Example:
namespace IsAndAsOperators
{
class Student
{
public int stuNo { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
class Employee
{
public int EmpNo { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public double Salary { get; set; }
}
class Program
{
static void Main(string[] args)
{
Student stuObj = new Student();
stuObj.stuNo = 1;
stuObj.Name = "Siva";
stuObj.Age = 15;
Employee EMPobj=new Employee();
EMPobj.EmpNo=20;
EMPobj.Name="Rajesh";
EMPobj.Salary=100000;
EMPobj.Age=25;
bool isStudent = (EMPobj is Student);
System.Console.WriteLine("Empobj is a Student ?: {0}", isStudent.ToString());
isStudent = (stuObj is Student);
System.Console.WriteLine("Stuobj is a Student ?: {0}", isStudent.ToString());
stuObj = null;
isStudent = (stuObj is Student);
System.Console.WriteLine("Stuobj(null) is a Student ?: {0}", isStudent.ToString());
System.Console.ReadLine();
}
}
Output
Empobj is a Student ?: False
Stuobj is a Student ?: True
Stuobj(null) is a Student ?: False
as operator
The as
operator does the same job of is
operator but the difference is instead of
bool
, it returns the object if they
are compatible to that type, else it returns null
.
Syntax:
Type obj = Object as Type;
Example:
namespace IsAndAsOperators
{
class Student
{
public int stuNo { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
class Employee
{
public int EmpNo { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public double Salary { get; set; }
}
class Program
{
static void Main(string[] args)
{
Student stuObj = new Student();
stuObj.stuNo = 1;
stuObj.Name = "Praveen";
stuObj.Age = 15;
Employee EMPobj=new Employee();
EMPobj.EmpNo=20;
EMPobj.Name="Rajesh";
EMPobj.Salary=100000;
EMPobj.Age=25;
System.Console.WriteLine("Empobj is a Student ?: {0}", CheckAndConvertobject(EMPobj));
System.Console.WriteLine("StuObj is a Student ?: {0}", CheckAndConvertobject(stuObj));
System.Console.ReadLine();
}
public static string CheckAndConvertobject(dynamic obj)
{
Student stuobj = obj as Student;
if (stuobj != null)
return "This is a Student and his name is " + stuobj.Name;
return "Not a Student";
}
}
}
Output:
Empobj is a Student ?: Not a Student
StuObj is a Student ?: This is a Student and his name is Praveen
Advantage of 'as' over 'is
In the case of is
operator, to type cast, we need to do two steps:
- Check the Type using
is
- If it’s
true
then Type cast
Actually this affects the
performance since each and every time the CLR will walk the inheritance hierarchy,
checking each base type against the specified type. To avoid this, use as
it will do it in one step. Only for checking the type should we use the is
operator.
History