示例#1
0
 public static TResult Accept <TResult>(this IVisitableExtensionPoint <object> visitable,
                                        [NotNull] VisitorFactory visitorFactory,
                                        object parameter1,
                                        object parameter2)
 {
     try
     {
         return(((dynamic)visitorFactory).Visit((dynamic)visitable.ExtendedValue,
                                                (dynamic)parameter1,
                                                (dynamic)parameter2));
     }
     catch (InvalidCastException invalidCastException)
     {
         if (visitorFactory.Rethrow)
         {
             throw;
         }
         return(visitorFactory.CreateFallbackObject <TResult>(visitable.ExtendedValue,
                                                              invalidCastException,
                                                              parameter1,
                                                              parameter2));
     }
     catch (RuntimeBinderException runtimeBinderException)
     {
         if (visitorFactory.Rethrow)
         {
             throw;
         }
         return(visitorFactory.CreateFallbackObject <TResult>(visitable.ExtendedValue,
                                                              runtimeBinderException,
                                                              parameter1,
                                                              parameter2));
     }
 }
示例#2
0
 public static TResult Accept <TResult>(this IVisitableExtensionPoint <object> visitable,
                                        [NotNull] VisitorFactory visitorFactory)
 {
     try
     {
         dynamic factory = visitorFactory;
         dynamic toVisit = visitable.ExtendedValue;
         TResult result  = factory.Visit(toVisit);
         return(result);
     }
     catch (InvalidCastException invalidCastException)
     {
         if (visitorFactory.Rethrow)
         {
             throw;
         }
         return(visitorFactory.CreateFallbackObject <TResult>(visitable.ExtendedValue, invalidCastException));
     }
     catch (RuntimeBinderException runtimeBinderException)
     {
         if (visitorFactory.Rethrow)
         {
             throw;
         }
         return(visitorFactory.CreateFallbackObject <TResult>(visitable.ExtendedValue, runtimeBinderException));
     }
 }
示例#3
0
 public static void Accept(this IVisitableExtensionPoint <object> visitable,
                           [NotNull] Visitor visitor)
 {
     try
     {
         ((dynamic)visitor).Visit((dynamic)visitable.ExtendedValue);
     }
     catch (RuntimeBinderException runtimeBinderException)
     {
         if (visitor.Rethrow)
         {
             throw;
         }
         visitor.Fallback(visitable.ExtendedValue, runtimeBinderException);
     }
 }
示例#4
0
 public static TResult Accept <TResult>(this IVisitableExtensionPoint <object> visitable,
                                        [NotNull] VisitorFactory <TResult> visitorFactory,
                                        object parameter1)
 {
     return(Accept <TResult>(visitable, (VisitorFactory)visitorFactory, parameter1));
 }