gpt4 book ai didi

c# - "Prefix"和 "as"转换

转载 作者:太空狗 更新时间:2023-10-29 21:58:31 25 4
gpt4 key购买 nike

这似乎是一个关于类型转换的非常愚蠢的问题,但是......

我有以下设置:

有许多类派生自一个主类。在某个时间和空间点,我得到一个项目,并希望将其作为子类的对象来处理。

阿苏姆:

class subClassA : mainclass 
class subClassB : mainclass

现在我有一些如果要问它是哪个类:

if(someObject is subClassA)
{
subClassA aA = someObject as subClassA ;
}

虽然对于大多数子类都返回了正确的对象,但我为一个子类得到了一个null-Object。

如果我执行以下操作:

if(someObject is subClassA)
{
subClassA aA = someObject as subClassA ; // <- aA = null; someObject is shown in debugger as object of subClassA

object test = someObject as subClassA; // <- object is not null
// or
subClassA aB = (subClassA)someObject; // <- object is not null, shows the correct object
}

我在 testaB 中有结果。

我不明白的地方:

为什么 as 失败而前缀转换成功?


现在我完全迷路了。

if(someObject is subClassA)
{
subClassA aA = someObject as subClassA ; // <- aA = null; someObject is shown in debugger as object of subClassA

subClassA aB = someObject as subClassA ; // <- aB != null.
}

if(someObject is subClassA)
{
subClassA aB = someObject as subClassA ; // <- aB != null.
}

名称 aA 是本地定义的。只有一个线程访问该方法。如果我只是重命名 aA 就可以了。

最佳答案

至少可以说,您所描述的场景令人困惑,所以您可以尝试以下操作吗:

subClassA aA = (someObject as subClassA) ?? (subClassA)someObject;

这行得通吗(例如 aA not null)?

关于 as 的一些详细信息,您可能需要引用以下帖子:

Casting vs using the 'as' keyword in the CLR

仍在调查更多,但我不确定如何重新创建场景...

编辑:

从一些非常聪明的人(SkeetLippert)那里读了很多书试图找到答案......

参见文档:

http://msdn.microsoft.com/en-us/library/scekt9xw(v=vs.110).aspx

as/转换文档:

http://msdn.microsoft.com/en-us/library/ms173105.aspx

关于c# - "Prefix"和 "as"转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14630581/

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