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

前端之家收集整理的这篇文章主要介绍了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 type
if (obj != null)

相反

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

猜你在找的C#相关文章