public void ExtensionUsingException()
        {
            var disposable = new ExtensionDisposable();

            var d = Expression.Parameter(typeof(ExtensionDisposable), "d");

            var disposer = Expression.Lambda <Action <ExtensionDisposable> >(
                ExpressionEx.Using(
                    d,
                    Expression.Block(
                        Expression.Throw(Expression.New(typeof(TestUsingException))),
                        Expression.Call(d, typeof(ExtensionDisposable).GetMethod("Touch")))),
                d).Compile();

            Assert.False(disposable.Touched);
            Assert.False(disposable.Disposed);

            Assert.Throws <TestUsingException>(() =>
            {
                disposer(disposable);
            });

            Assert.False(disposable.RefInDisposed);
            Assert.False(disposable.Touched);
            Assert.True(disposable.Disposed);
        }
Пример #2
0
 public static void Dispose(this ExtensionDisposable obj)
 {
     obj.UnderlyingDisposable.Dispose();
 }