Переменная " x " объявлена, но никогда не использовалась ошибка
хорошо, поэтому у меня есть этот отличный бит кода от Microsoft, и у меня есть небольшая икота, от которой я хочу избавиться.
исходный код распечатывает ChangeConflictException x на консоли, но я удалил эту строку. Теперь, каждый раз, когда я использую этот бит кода, я получаю ошибку: "переменная 'x' объявлена, но никогда не использовалась".
какой самый эффективный способ избавиться от этой ошибки при сохранении функциональности кода?
//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 ответов
компилятор прав; это может быть также:
catch (ChangeConflictException)
{
foreach (ObjectChangeConflict occ in DB.ChangeConflicts)
{
occ.Resolve(RefreshMode.KeepChanges);
}
}
который ограничивает исключения, которые входят в этот блок, но делает не объявите переменную для него. Переменная полезна, если вы хотите проверить значение, зарегистрируйте его или оберните в другое исключение. Просто для полноты (здесь не работает) вообще повторный бросок должен быть throw;
, не throw x;
(для сохранения трассировки стека).
хотя в этом случае вы можете просто избавиться от переменной 'x' (Как упоминалось Марком). Как правило, для сценариев, где у меня есть эти предупреждения, и я не могу изменить код (например, используя некоторые поля по отражению), Я обычно предпочитаю ничего не делать, вызывая метод условной компиляции, который подавляет такие раздражающие предупреждения.
код ниже.
catch (ChangeConflictException x)
{
DoNothingWith(x);// This suppress the 'x' not used warning
foreach (ObjectChangeConflict occ in DB.ChangeConflicts)
{
occ.Resolve(RefreshMode.KeepChanges);
}
}
[Conditional("Debug")]
public static void DoNothingWith(object obj){
}
ссылка из MSDN об условном атрибуте: "Вызовы условного метода либо включены, либо опущено в зависимости от того, определен ли этот символ в точке вызова. Если символ определен, вызов включен; в противном случае вызов (включая оценку параметров вызова) опущен."
#pragma warning disable 0168
catch (ChangeConflictException x)
{
// code here
}
#pragma warning enable 0168