2012-02-09 4 views
-2

j'ai couru un outil d'analyse de code statique sur notre outil et regardant ses résultats le code ci-dessous a été l'une des choses qu'il parlait:Quel code est écrit mieux?

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

Alors je l'ai changé le code ci-dessous et il fixe l'erreur que l'outil parlait:

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

Alors à votre avis Quel style de codage pensez-vous est plus approprié et moins sujette aux erreurs?

Merci

+2

[codereview.se] existe pour des questions comme celle-ci. –

+0

Et de quelle erreur * parlait-il? –

+0

@KyleTrauberman: ce code de 500K a été converti de VB 6.0 en C# avec quelques outils, nous n'avons pas pu revoir le code à nouveau, donc nous sommes en train de refactoriser des choses comme ça comme nous les voyons dans le code. – Bohn

Répondre

4

Les deux signifient des choses complètement différentes, à moins que SetRowCol renvoie this à la fin. Dans la première, vous disposez des résultats de SetRowCol. Dans la seconde, vous disposez du SpreadSnapshot.

Si les deux sont à usage unique, vous devriez faire un utilisant pour les deux:

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

correct, il renvoyait "this", donc le premier code est toujours correct. droite? – Bohn

6

Ce dernier - il assure que vous ne finissent pas à l'aide oSnapaprès la déclaration using. Mis à part toute autre chose, il serait assez étrange pour SetRowCol de rendre quelque chose jetable ... qu'est-ce que cela signifierait même?

+0

J'utilise l'instruction using quand je fais linq-to-sql (en utilisant DataContext ....). Quelle est la différence entre l'utilisation d'une instruction using et l'instanciation d'un objet? – frenchie

+0

@frenchie: C'est une trop grosse question pour répondre facilement aux commentaires, mais cela devrait être couvert dans tout bon livre d'introduction en C#. Je vous suggère fortement de lire l'instruction using avant de continuer ... –

+0

@JonSkeet: Merci Jon, est-ce que le premier style de codage provoquera aussi des fuites de mémoire? – Bohn

Questions connexes