快速提问; 执行安全演员后,我是否总是需要检查空值?我现在这样做,但在这种情况下:
void button1_Click(object sender, EventArgs e) { Button = sender as Button; if (button != null) // <-- necessary? { // do stuff with 'button' } }
我只是想知道我是不是在想什么.我每次出于习惯都会检查null,但是在这种情况下,我认为如果非Button对象连接到应该只用于按钮的处理程序,我宁愿崩溃.
编辑:好的,谢谢你们.如果有一个我失踪的角度,我只是好奇.
如果要在传入非Button时崩溃,请执行以下操作:
var button = (Button)sender;
请注意,如果传入了null对象,它仍然可以为null.
这取决于您的代码合同.
如果您确定不是null,则无需检查.您可以引入一个断言来仅检查调试模式.我通常只检查过null,好像我之前没有检查过,否则我相信我的合同,有时候我会使用断言.
var button = sender is Button ? sender as Button : throw new Exception("Not a button");
如果你想要一个与坏演员不同的异常,你可以试试这样的东西.同样,正式的代码合同会更好.看看这个图书馆.