2012-02-09 5 views
-2

Я побежал инструмент статического анализа кода на нашем инструменте и, глядя на его результаты ниже код был один из вещей, он говорил о:Какой код написан лучше?

SpreadSnapshot oSnap = new SpreadSnapshot(); 
    using (oSnap.SetRowCol(fpSpread, row, col)) 
    { 
     SpreadSetComboBox(fpSpread, list, displayProperty); 
    } 

Так что я изменил его на код ниже и исправлена ​​ошибка что инструмент говорил:

using (SpreadSnapshot oSnap = new SpreadSnapshot()) 
    { 
     oSnap.SetRowCol(fpSpread, row, col); 
     SpreadSetComboBox(fpSpread, list, displayProperty); 
    } 

Так, по вашему мнению Какого стиля кодирования вы считаете более подходящие и менее подвержены ошибкам?

Благодаря

+2

[codereview.se] существует для подобных вопросов. –

+0

И какая именно ошибка * была * она говорит? –

+0

@KyleTrauberman: этот код 500K был конвертирован с VB 6.0 на C# с некоторыми инструментами, мы не смогли его полностью пересмотреть, поэтому мы рефакторизуем такие вещи, как мы видим их в коде. – Bohn

ответ

4

Эти два значения означают совершенно разные вещи, если SetRowCol не возвращает this в конце. Во-первых, вы удаляете результаты SetRowCol. Во втором вы удаляете SpreadSnapshot.

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

using (SpreadSnapshot oSnap = new SpreadSnapshot()) 
using (oSnap.SetRowCol(fpSpread, row, col)) 
{ 
    SpreadSetComboBox(fpSpread, list, displayProperty); 
} 
+0

Правильно, он возвращал «это», поэтому первый код по-прежнему правильный. правильно? – Bohn

6

Последнее - это гарантирует, что вы не в конечном итоге с помощью oSnapпослеusing заявление.

Помимо всего прочего, было бы довольно странно для SetRowCol вернуть что-то одноразовое ... что бы это означало?

+0

Я использую инструкцию using, когда я делаю linq-to-sql (используя DataContext ....). В чем разница между использованием оператора using и экземпляром объекта? – frenchie

+0

@frenchie: Это слишком большой вопрос, на который можно легко ответить в комментариях, но он должен быть освещен в любой хорошей вводной книге C#. Я * сильно * предлагаю вам прочитать инструкцию по использованию перед продолжением ... –

+0

@JonSkeet: Спасибо, Джон, может ли первый стиль кодирования вызвать утечку памяти? – Bohn

Смежные вопросы