Off*_*ler 6 c# casting type-conversion
这似乎是一个关于铸造的非常愚蠢的问题,但......
我有以下设置:
主类中有许多类派生.在某个时间点和空间,我得到一个项目,并希望将其作为子类的对象处理.
Asume:
class subClassA : mainclass
class subClassB : mainclass
Run Code Online (Sandbox Code Playgroud)
现在我有一些问题,问它是哪一堂课:
if(someObject is subClassA)
{
subClassA aA = someObject as subClassA ;
}
Run Code Online (Sandbox Code Playgroud)
虽然对于大多数子类,返回正确的对象,但我得到一个子类a 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
}
Run Code Online (Sandbox Code Playgroud)
我有结果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.
}
Run Code Online (Sandbox Code Playgroud)
名称aA是本地定义的.只有一个线程访问该方法.如果我只是重命名aA它的工作原理.
至少可以说,您描述的场景令人困惑,因此您可以尝试以下操作:
subClassA aA = (someObject as subClassA) ?? (subClassA)someObject;
Run Code Online (Sandbox Code Playgroud)
这有效吗(例如aA不为空)?
您可能需要参考以下帖子以了解有关以下内容的一些详细信息as:
仍在调查更多内容,但我不确定如何重新创建该场景......
编辑:
阅读了很多非常聪明的人(斯基特和利珀特)的文章,试图找到答案......
请参阅is文档:
http://msdn.microsoft.com/en-us/library/scekt9xw(v=vs.110).aspx
as/ 转换文档:
http://msdn.microsoft.com/en-us/library/ms173105.aspx