TryFault() public static method

Creates a TryExpression representing a try block with a fault block and no catch statements.
public static TryFault ( Expression body, Expression fault ) : TryExpression
body Expression The body of the try block.
fault Expression The body of the fault block.
return TryExpression
Ejemplo n.º 1
0
        public void TryFault()
        {
            var expected = LinqExpression.TryFault(
                LinqExpression.Constant(0L),
                LinqExpression.Constant(0L));

            using var g = new GraphEngine.Graph();
            g.LoadFromString(@"
@prefix : <http://example.com/> .

:s
    :tryBody _:zero ;
    :tryFault _:zero ;
.
_:zero
    :constantValue 0 ;
.
");
            var s = g.GetUriNode(":s");

            var actual = Expression.Parse(s).LinqExpression;

            Console.WriteLine(actual.GetDebugView());

            actual.Should().Be(expected);
        }
Ejemplo n.º 2
0
        static void Main()
        {
            var asm = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName("bar"), AssemblyBuilderAccess.Save);
            var mod = asm.DefineDynamicModule("bar.dll");
            var typ = mod.DefineType("Foo");

            var lblRet = Expression.Label(typeof(int));
            var lbl1   = Expression.Label(typeof(int));
            var ex     = Expression.Parameter(typeof(Exception));

            var expressions = new Expression[]
            {
                Expression.TryFault(
                    Expression.Constant(1),
                    Expression.Constant(2)
                    ),
                Expression.Block(
                    Expression.TryFault(
                        Expression.Goto(lblRet, Expression.Constant(1)),
                        Expression.Constant(2)
                        ),
                    Expression.Label(lblRet, Expression.Constant(0))
                    ),
                Expression.Block(
                    Expression.TryFault(
                        Expression.Block(
                            Expression.Goto(lblRet, Expression.Constant(1)),
                            Expression.Constant(2)
                            ),
                        Expression.Constant(3)
                        ),
                    Expression.Label(lblRet, Expression.Constant(0))
                    ),
                Expression.Block(
                    Expression.TryFault(
                        Expression.Block(
                            Expression.Goto(lbl1, Expression.Constant(1)),
                            Expression.Goto(lblRet, Expression.Constant(2))
                            ),
                        Expression.Constant(3)
                        ),
                    Expression.Label(lbl1, Expression.Constant(-1)),
                    Expression.Label(lblRet, Expression.Constant(0))
                    ),
                Expression.TryCatch(
                    Expression.Constant(1),
                    Expression.Catch(ex, Expression.Constant(2), Expression.Constant(true))
                    ),
            };

            var i = 0;

            foreach (var expression in expressions)
            {
                var mtd = typ.DefineMethod("M" + i, MethodAttributes.Public | MethodAttributes.Static, typeof(int), new Type[0]);
                Expression.Lambda <Func <int> >(expression).CompileToMethod(mtd);

                var cw = Expression.Lambda <Func <int> >(expression).CompileWithExceptionHandling();
                cw();

                i++;
            }
        }