这两个表达式有什么区别?
(ListView)sender
sender as ListView
一般情况下,我通常使用 exp sender as ListView
。
但在SO中我发现大多数时候用户使用(ListView)sender
。
所以,我想知道哪一个更有效率。
或者,
如果是编码器的选择,使用哪一个[并且两者的工作方式相同] ??
答案 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条件。