当前位置:  开发笔记 > 编程语言 > 正文

有没有令人信服的理由反对使用C#关键字"as"?

如何解决《有没有令人信服的理由反对使用C#关键字"as"?》经验,为你挑选了3个好方法。

我发现使用以下内容:

TreeViewItem i = sender as TreeViewItem;
if(i != null){ ... }

比以下更容易编写和理解:

if(sender.GetType() == typeof(TreeViewItem)){
    TreeViewItem i = (TreeViewItem)sender;
    ...
}

有没有令人信服的理由使用第一个结构?



1> Jon Skeet..:

as在大多数情况下,我更喜欢强制转换,因为通常如果对象的类型错误,则表示存在错误.错误应该导致异常IMO - 并且InvalidCastException执行转换的行恰好比NullReferenceException代码中的更晚更清楚.

as应该在有效且合法的情况下使用,以便传递对您不想要的类型的对象的引用.确实出现了这种情况,但并不像我的经验那样经常进行.

GetType()但是,使用比较类型很少是正确的解决方案 - 只有在您想要检查所涉及的确切类型而不是兼容类型时才适用.

关于其他地方的"演员与演唱"讨论,我写了一篇明显更长的答案.



2> Otávio Décio..:

完全没有 - 它让你有机会验证转换(强制转换)是否正常.如果你这样做

TreeViewItem i = (TreeViewItem) sender;

如果演员表失败,你可能会得到一个例外.



3> Anton Gogole..:

一般来说,这两个片段并不相同.TreeViewItem i = sender as TreeViewItem将产生正确的结果,即使sender是一个盛大隆重的孩子TreeViewItem,而sender.GetType() == typeof(TreeViewItem)true sender是恰恰TreeViewItem和其任何可能的子类.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有