“(列表视图)发件人”与“发件人作为列表视图”
本文关键字:列表 视图 | 更新日期: 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
,然后检查空条件。