public static T TypeAssert <T>(this go.main_package.Abser target)
 {
     try
     {
         return(((go.main_package.Abser <T>)target).Target);
     }
     catch (NotImplementedException ex)
     {
         throw new PanicException($"panic: interface conversion: {target.GetType().FullName} is not {typeof(T).FullName}: missing method {ex.InnerException?.Message}");
     }
 }
 public static bool TryTypeAssert(this go.main_package.Abser target, Type type, out object result)
 {
     try
     {
         result = target.TypeAssert(type);
         return(true);
     }
     catch (PanicException)
     {
         result = type.IsValueType ? Activator.CreateInstance(type) : null;
         return(false);
     }
 }
 public static bool TryTypeAssert <T>(this go.main_package.Abser target, out T result)
 {
     try
     {
         result = target.TypeAssert <T>();
         return(true);
     }
     catch (PanicException)
     {
         result = default(T);
         return(false);
     }
 }
Exemplo n.º 4
0
        public static object TypeAssert(this go.main_package.Abser target, Type type)
        {
            try
            {
                MethodInfo conversionOperator = s_conversionOperators.GetOrAdd(type, _ => typeof(go.main_package.Abser <>).GetExplicitGenericConversionOperator(type));

                if ((object)conversionOperator == null)
                {
                    throw new PanicException($"panic: interface conversion: {target.GetType().FullName} is not {type.FullName}");
                }

                return(conversionOperator.Invoke(null, new object[] { target }));
            }
            catch (NotImplementedException ex)
            {
                throw new PanicException($"panic: interface conversion: {target.GetType().FullName} is not {type.FullName}: missing method {ex.InnerException?.Message}");
            }
        }