假设我在我的C#应用程序中拥有这样的功能,如果我的代码保持原样,编译器就会(理所当然地)抱怨我声明了ex但没有使用它。
try{
Somethrowingmethod();
}catch(Exception ex){
throw new Exception("oops");
}
如果我保持我的代码原样,编译器就会(理所当然地)抱怨我声明了ex但没有使用它。
所以我应该这样做。
try{
Somethrowingmethod();
}catch(Exception _){
throw new Exception("oops");
}
我的问题是 一旦我这样做,是否会有性能提升?
还是说这只是为了干净的代码实践?
你的问题是有缺陷的,因为你的例子不涉及丢弃。相反,它命名了 Exception
可变的 _
并且仍然应该为未使用的变量发出同样的警告。参见 这个夏普实验室 例子,看看警告和 .locals init
的异常。
.locals init (
[0] class [System.Private.CoreLib]System.Exception
)
正确的 "丢弃 "异常的方法是抓取 类型 只。
try {
DoSomething();
} catch (Exception) {
//...
}
这并没有声明一个本地变量,你可以在上面的链接中验证,只需擦掉 _
并看了更新后的 .locals init
部分 (提示:它现在已经消失了)。
由于这是在捕获基本的异常类型,你也可以把它改写成。
try {
DoSomething();
} catch {
//...
}
但是请注意,它是 一般 欲擒故纵 Exception
型。
不过回到你最初的询问:这些情况下都不涉及性能提升。最多 变量被省略,而 真正 discard只是语法上的糖,而且还是声明了一个变量。这段代码。
int.TryParse("1", out _);
仍然涉及到一个局部变量的类型 int
. 您可以通过查看 劳工组织的同一部门.
.locals init (
[0] int32
)
但同样没有性能提升。
或者干脆这样做
try{
Somethrowingmethod();
}catch(Exception){
throw new Exception("oops");
}
但在性能上却没有区别