OK, j'ai donc ce bit de code nifté de Microsoft, et j'ai un petit hoquet que je souhaite me débarrasser.
Le code d'origine imprime la ChangeConflicCetion X sur la console, mais j'ai effacé cette ligne . Maintenant, chaque fois que j'utilise ce bit de code, j'obtiens l'erreur: "La variable 'x' est déclarée mais jamais utilisée". P>
Quel est le moyen le plus efficace de se débarrasser de cette erreur tout en conservant la Fonctionnalité du code? P>
//See http://msdn.microsoft.com/en-us/library/bb386918.aspx
try
{
DB.SubmitChanges(ConflictMode.ContinueOnConflict);
}
catch (ChangeConflictException x)
{
foreach (ObjectChangeConflict occ in DB.ChangeConflicts)
{
occ.Resolve(RefreshMode.KeepChanges);
}
}
// Submit succeeds on second try.
DB.SubmitChanges(ConflictMode.FailOnFirstConflict);
3 Réponses :
Le compilateur a raison; Il pourrait aussi bien être: qui limite les exceptions qui entrent dans ce bloc, mais pas forts> déclarent une variable pour cela. La variable est utile si vous voulez inspecter em> la valeur, le loger ou l'envelopper dans une autre exception. Juste pour l'exhaustivité (ne s'applique pas ici) généralement em> un report doit être lancer; code>, pas em> jette x; code> (pour préserver la trace de pile). P> p>
Ok, je soupçonnai que vous pourriez supprimer le «X», mais le code est trop complexe pour que je puisse dire s'il a apporté un changement significatif. Merci!
Cependant, dans ce cas, vous pouvez simplement vous débarrasser de la variable «X» (comme mentionné par Marc). Généralement, pour les scénarios où j'ai ces avertissements et je ne peux pas changer le code (comme l'utiliser des champs par réflexion), je préfère généralement faire de ne rien appelle à la méthode de compilation conditionnelle qui supprime des avertissements aussi gênants.
Code ci-dessous. p> référence de MSDN sur l'attribut conditionnel:
"Les appels vers une méthode conditionnelle sont soit inclus, soit omis selon que ce symbole soit défini au point de l'appel. Si le symbole est défini, l'appel est inclus; sinon, l'appel (y compris l'évaluation des paramètres de l'appel) est omis. " p> p>
Vous pouvez également faire cela: x = x code>.
@LoadMaster: Veuillez expliquer à la classe comment se débarrasser d'un avertissement «local inutilisé» en le remplaçant par un «local est affecté à lui-même», une avertissement est une amélioration.
Euh, d'accord, je ne pensais pas que le compilateur attrape ça.
#pragma warning disable 0168
catch (ChangeConflictException x)
{
// code here
}
#pragma warning enable 0168
Juste pour clarifier, ceci est un avertissement, pas une erreur, correct?
@Robaticus - sauf si vous activez des avertissements-comme-erreurs; p
Oh Snap! Mais oui, j'étais incorrect de l'appeler une erreur et non un avertissement.
@Marc - vrai dat! Certains diraient que c'est exactement ce que vous devriez faire!