丢弃者的性能优势

问题描述 投票:1回答:2

假设我在我的C#应用程序中拥有这样的功能,如果我的代码保持原样,编译器就会(理所当然地)抱怨我声明了ex但没有使用它。

try{
    Somethrowingmethod();
}catch(Exception ex){
    throw new Exception("oops");
}

如果我保持我的代码原样,编译器就会(理所当然地)抱怨我声明了ex但没有使用它。

所以我应该这样做。

try{
    Somethrowingmethod();
}catch(Exception _){
    throw new Exception("oops");
}

我的问题是 一旦我这样做,是否会有性能提升?

还是说这只是为了干净的代码实践?

c# variables
2个回答
3
投票

你的问题是有缺陷的,因为你的例子不涉及丢弃。相反,它命名了 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
)

但同样没有性能提升。


2
投票

或者干脆这样做

try{
    Somethrowingmethod();
}catch(Exception){
    throw new Exception("oops");
}

但在性能上却没有区别

© www.soinside.com 2019 - 2024. All rights reserved.