“(ListView)发件人”与“发件人作为ListView”

时间:2012-05-23 04:54:30

标签: c# casting sender

  

可能重复:
  C# “as” cast vs classic cast

这两个表达式有什么区别?

  • (ListView)sender
  • sender as ListView

一般情况下,我通常使用 exp sender as ListView。 但在SO中我发现大多数时候用户使用(ListView)sender

所以,我想知道哪一个更有效率。

或者,

如果是编码器的选择,使用哪一个[并且两者的工作方式相同] ??

6 个答案:

答案 0 :(得分:11)

不同之处在于 如果发送者不是ListView,则(ListView)发送者将抛出异常,但作为ListView的发送者不会抛出异常,如果强制转换无效,则返回null。

答案 1 :(得分:5)

不同之处在于,如果由于某种原因,发件人无法转发到ListView,(ListView)sender将抛出异常,而sender as ListView将导致结果为空。

答案 2 :(得分:2)

var listview = (ListView)sender  // Throws an exception if sender is not listView

var listview = sender as ListView  // listview will be assigned to null if sender is not
                                   // a listview

答案 3 :(得分:0)

as运算符在失败时不抛出异常,而是用null填充Left-Hand-Side变量。

如果发件人不是ListView,(ListView)sender将抛出异常。

答案 4 :(得分:0)

如果(a)b无法分配给b或无法转换,则使用a会抛出异常,即使a为非可空类型也可以使用(如int)。使用b as a永远不会抛出异常(如果null无法分配给b,则返回a),但不会转换(例如,您可以执行(int?)12.3但不是12.3 as int?),如果a不可为空,则不起作用(例如,您可以12 as int?而不是12 as int)。

答案 5 :(得分:0)

sender as ListView与:

相同
sender is ListView ? (ListView)sender : null

效率几乎没有差异。 as对于无效的强制转换是安全的,因为它产生的是null结果而不是抛出异常,因此我总是使用as然后检查null条件。