“(列表视图)发件人”与“发件人作为列表视图”

本文关键字:列表 视图 | 更新日期: 2023-09-27 18:35:13

可能的重复项:
C#"作为"强制转换与经典转换

这两种表达有什么区别?

  • (ListView)sender
  • sender as ListView

一般来说,我通常使用 exp sender as ListView .但是在SO中,我发现大多数时候用户使用(ListView)sender

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

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

“(列表视图)发件人”与“发件人作为列表视图”

区别在于(列表视图)如果发件人不是列表视图,则发件人将引发异常,但如果强制转换无效,则作为列表视图的发件人不会引发异常并返回 null。

区别在于,如果由于某种原因发件人不可强制转换为 ListView,(ListView)sender将引发异常,而sender as ListView将导致结果为 null。

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

as运算符在失败时不会引发异常,而是用 null 填充左侧变量。

如果发件人不是列表视图,(ListView)sender将引发异常。

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

sender as ListView

与:
sender is ListView ? (ListView)sender : null

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