gpt4 book ai didi

c# - 将 IClass 转换为 Class 时是否应该检查 NULL?

转载 作者:太空狗 更新时间:2023-10-29 17:31:43 26 4
gpt4 key购买 nike

问题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 as NewClass 被称为间接强制转换,适用于你想告诉程序“嘿,我认为这会起作用,但如果不行,不要 panic 并抛出异常”的场景...如果它不起作用,我会处理它。”

在转换中使用 isas

根据您想要的场景,一个会比另一个更好。从技术角度来看,as 是首选。 .Net 将使用原子方式尝试转换为所需的类型,如果不是,则返回 null,其中 is 它将不得不遍历继承树两次,以查看它是否与该类型匹配,然后进行转换。所以在大多数情况下,如果您想查看是否要强制转换和使用该类型,最好:

var obj = o as type
if (obj != null)

相对于

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

关于c# - 将 IClass 转换为 Class 时是否应该检查 NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6153752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com