变量'x'已声明但从未使用过错误

时间:2010-06-29 20:36:47

标签: c# linq

好的,所以我从微软那里得到了一些漂亮的代码,我有点想要摆脱它的打嗝。

原始代码在控制台上打印出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 个答案:

答案 0 :(得分:22)

编译器是对的;它也可以是:

catch (ChangeConflictException)
{
    foreach (ObjectChangeConflict occ in DB.ChangeConflicts)
    {
        occ.Resolve(RefreshMode.KeepChanges);
    }
}

限制进入该块的异常,但为其声明变量。如果要检查值,记录它或将其包装在另一个异常中,该变量很有用。只是为了完整性(这里不适用)一般重新抛出应该是throw;不是 throw x;(以保留堆栈跟踪)。

答案 1 :(得分:3)

虽然在这种情况下你可以简单地摆脱'x'变量(如Marc所提到的)。通常,对于我有这些警告并且我无法更改代码的情况(比如通过反射使用某些字段),我通常更喜欢对条件编译方法进行无操作调用,这会抑制这些恼人的警告。

以下代码。

    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的有关条件属性的参考: “包含或省略对条件方法的调用,具体取决于是否在调用点定义了此符号。如果定义了符号,则包含调用;否则,调用(包括调用参数的评估)被省略。“

答案 2 :(得分:1)

#pragma warning disable 0168

catch (ChangeConflictException x)
{
   // code here
}

#pragma warning enable 0168