加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 03:42:51 所属栏目:百科 来源:网络整理
导读:问题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 INewC
问题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); 
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读