C# · 12月 29, 2021

c# – 在将IClass转换为Class时应该检查NULL吗?

问题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 typeif (obj != null)

相反

if(o is type){ var obj = (type); }