You need
to determine which operator is best in your situation the
cast—(
type
)--
operator,
the as
operator, or the is
operator.
Use the information provided in the Discussion section to determine which operator is best to use.
The cast operator should be used when:
It is acceptable for the
InvalidCastException
to be thrown. To prevent this
exception from being thrown, consider using either the
as
or is
operators.
You are casting a reference type to a reference type.
You are casting a value type to a value type.
You are performing a boxing or unboxing conversion.
You are invoking a user-defined conversion. The is
and as
operators cannot handle this type of cast.
The as
operator should
be used when:
It is not acceptable for the
InvalidCastException
to be thrown. The
as
operator will instead return a
null
if the cast cannot be performed.
You are casting a reference type to a reference type.
You are not casting a value type to a value type. The cast operator must be used in this case.
You are performing a boxing conversion.
You are not performing an unboxing conversion. The cast operator must be used in this case.
You are not invoking a user defined conversion. The cast operator must be used in this case.
The is
operator should
be used when:
You need a fast method of determining whether a cast can be performed before the actual cast is attempted.
You do not need to actually cast a variable from one data type to another; you just need to determine if the variable can be cast to a specific type.
It is not acceptable for the InvalidCastException
to be thrown.
You are casting a reference type to a reference type.
You are not casting a value type to a value type. The cast operator must be used in this case.
You are not invoking a user defined conversion.
Unlike the as
operator, a compile-time error is
not displayed when using the is
operator with a
user-defined conversion. This is
operator will
instead always return a false
value, regardless of
whether the cast can successfully be performed.
See Recipe 3.15 and Recipe 3.16; see the “( ) Operator,” “as Operator,” and “is Operator” topics in the MSDN documentation.