问题1>在以下情况下应该检查NULL吗?
public interface INewClass {} public class NewClass : INewClass {} public void FunMeA(INewClass obj) { NewClass n = (NewClass) obj; ... // Should I check (n == null) here? // call methods defined inside INewClass (updated from NewClass to INewClass) ... } A concrete example,public void FunMeB(IAsyncResult itfAR) { AsyncResult ar = (AsyncResult) itfAR; ... // Should I check (ar == null) here? // access ar.AsyncDelegate ... }
问题2>我刚刚开始从C转移到C#.
当在C编码时,我知道检查何时应该完成.
但是,我完全迷失在C#世界.所以问题是:是吗
一般的规则,可以告诉我什么时候我必须检查NULL?
谢谢
解决方法
这样做时
NewClass n = (NewClass) obj;
没有任何意义,因为如果不转换它将抛出一个无效的转换异常.
如果您对您是否可以实际投下任何疑问,您可以这样做:
NewClass n = obj as NewClass;
然后
if(n != null) ...
你正在做的演员称为直播,系统将假定它可以制作. n = obj作为NewClass被称为间接转换,是为那些你想告诉程序的情况“嘿,我认为这将工作,但如果不是不翻转和抛出一个异常…我会交易如果它不起作用.“
使用的是vs,在铸造.
根据你想要的情况,一个会比另一个更好.从技术上来说,从性能的角度来看是首选. .Net将使用原子式尝试来转换为所需类型,如果不是,则返回null,那么它将不得不将继承树进行两次,以查看它是否匹配该类型,然后将其转换.所以在大多数情况下,如果你想看看是否要转换并使用该类型,最好是:
var obj = o as type if (obj != null)
相反
if(o is type) { var obj = (type); }