好的,所以我从微软那里得到了一些漂亮的代码,我有点想要摆脱它的打嗝。
原始代码在控制台上打印出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);
答案 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