Метод распоряжаться функциональностью C # - PullRequest
0 голосов
/ 13 июля 2011

Есть ли способ избавиться от переменных метода без использования блока try-finally в C # 2010 (.Net 4)?

История: У меня есть несколько методов обработки файлов. Каждый обработчик (метод) может прерваться в середине выполнения. Мне нравится избавляться от объекта всего метода перед выходом из метода. Опция составления метода dispose для каждого обработчика не является опцией.

Спасибо

Это демонстрирует общую идею: `открытый статический класс Сравнение { приватный статический bool CompareXmls (...) { // имеет 7 объектов для размещения в 3 точках выхода в соответствии с 4 условиями

        //General method flow:

        //1. init part of the object

        //2. if(!<condition1>)
                //disposed objects
                //exit method

        //3. perform some actions

        //4. init some of the other objects

        //2. if(!<condition2>)
                //disposed objects
                //exit method

        //and so on...
    }

    private static bool CompareJpgs(...)
    {
        //has 12 object to be disposed in 10 exit points acordding to 4 conditions
    }

    private static bool CompareBitMaps(...)
    {
        //has 5 object to be disposed in 3 exit points acordding to 4 conditions
    }

    private static bool CompareTxts(...)
    {
        //has 12 object to be disposed in 10 exit points acordding to 4 conditions
    }
}`

У меня есть еще 7 методов сравнения

Ответы [ 2 ]

1 голос
/ 13 июля 2011

using?Смотрите полное описание того, как и зачем использовать http://msdn.microsoft.com/en-us/library/yh598w02(v=VS.100).aspx.. Пример будет

using (MyDisposableType disposable1 = GetDisposable1(), disposable2 = GetDisposable2() /*,...*/)
{
    //your actions
}

. После выхода из блока using все одноразовые объекты, объявленные в его заголовке, будут удалены..

Если ваши одноразовые предметы бывают разных типов, вы можете использовать вложенные using s:

using (MyDisposableType1 disposable1 = GetDisposable1())
{
    using (MyDisposableType2 disposable2 = GetDisposable2())
    {
        //more usings if needed, and then your actions
    }
}
0 голосов
/ 13 июля 2011

Я бы поместил метод в объект, который ограничивает idisposible и вызвал бы this.dispose () в блоке finally

...