这似乎是一个关于选角的非常愚蠢的问题,但是......
我有以下设置:
有许多类派生自一个主类。在某个时间和空间点,我得到一个项目,并希望将其作为子类的对象处理。
假设:
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
}
我在test
和中有结果aB
。
我不明白的是:
为什么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 它可以工作。