BodyOfCatchMustHaveSameTypeAsBodyOfTry() static private method

ArgumentException with message like "Body of catch must have the same type as body of try."
static private BodyOfCatchMustHaveSameTypeAsBodyOfTry ( ) : Exception
return System.Exception
Esempio n. 1
0
 //Validate that the body of the try expression must have the same type as the body of every try block.
 private static void ValidateTryAndCatchHaveSameType(Type type, Expression tryBody, ReadOnlyCollection <CatchBlock> handlers)
 {
     Debug.Assert(tryBody != null);
     // Type unification ... all parts must be reference assignable to "type"
     if (type != null)
     {
         if (type != typeof(void))
         {
             if (!TypeUtils.AreReferenceAssignable(type, tryBody.Type))
             {
                 throw Error.ArgumentTypesMustMatch();
             }
             foreach (CatchBlock cb in handlers)
             {
                 if (!TypeUtils.AreReferenceAssignable(type, cb.Body.Type))
                 {
                     throw Error.ArgumentTypesMustMatch();
                 }
             }
         }
     }
     else if (tryBody.Type == typeof(void))
     {
         //The body of every try block must be null or have void type.
         foreach (CatchBlock cb in handlers)
         {
             Debug.Assert(cb.Body != null);
             if (cb.Body.Type != typeof(void))
             {
                 throw Error.BodyOfCatchMustHaveSameTypeAsBodyOfTry();
             }
         }
     }
     else
     {
         //Body of every catch must have the same type of body of try.
         type = tryBody.Type;
         foreach (CatchBlock cb in handlers)
         {
             Debug.Assert(cb.Body != null);
             if (!TypeUtils.AreEquivalent(cb.Body.Type, type))
             {
                 throw Error.BodyOfCatchMustHaveSameTypeAsBodyOfTry();
             }
         }
     }
 }