The is operator
The is operator is used to dynamically check if the run-time type of an object is compatible with a given type. The result of the operation E is T, where E is an expression and T is a type, is a boolean value indicating whether E can successfully be converted to type T by a reference conversion, a boxing conversion, or an unboxing conversion. The operation is evaluated as follows, after type arguments have been substituted for all type parameters: · If E is an anonymous function, a compile-time error occurs · If E is a method group or the null literal, of if the type of E is a reference type or a nullable type and the value of E is null, the result is false. · Otherwise, let D represent the dynamic type of E as follows: o If the type of E is a reference type, D is the run-time type of the instance reference by E. o If the type of E is a nullable type, D is the underlying type of that nullable type. o If the type of E is a non-nullable value type, D is the type of E. · The result of the operation depends on D and T as follows: o If T is a reference type, the result is true if D and T are the same type, if D is a reference type and an implicit reference conversion from D to T exists, or if D is a value type and a boxing conversion from D to T exists. o If T is a nullable type, the result is true if D is the underlying type of T. o If T is a non-nullable value type, the result is true if D and T are the same type. o Otherwise, the result is false. Note that user defined conversions, are not considered by the is operator.
|