Recipe 3.14 Determining Whether to Use theCast Operator, the as Operator, or theis Operator
Problem
You need
to determine which operator is best in your situation the
cast—(type)--operator,
the as operator, or the is
operator.
Solution
Use the information provided in the Discussion section to determine
which operator is best to use.
Discussion
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 Also
See Recipe 3.15 and Recipe 3.16; see the "( )
Operator," "as
Operator," and "is
Operator" topics in the MSDN documentation.
|