转换对象使其变为空

0 c# action casting func

在这样的回电中:

 this.Model.LoadStudent(student_key, (o, a) =>
                            {
                                var student = o as Students;
Run Code Online (Sandbox Code Playgroud)

如果我在第一行设置了一个断点,调试器会向我显示我"o"正在查找的内容,并向我显示它的类型,"Students"但是只要它转到下一行并进行转换,结果就是null.为什么?怎么了?

Jon*_*eet 6

你不是在施法 - 你正在使用as操作员.如果你真的投了,我怀疑你会得到一个例外:

var student = (Students) o;
Run Code Online (Sandbox Code Playgroud)

我怀疑你实际上有多种类型被调用Students,如果你真的投射而不是使用as你会看到所涉及的实际类型.

例如:

using System;

namespace Bad
{
    class Students {}

    class Test
    {
        static void Main()
        {
            object o = new Good.Students();
            Students cast = (Students) o;
        }
    }
}

namespace Good
{
    class Students {}
}
Run Code Online (Sandbox Code Playgroud)

这导致:

Unhandled Exception: System.InvalidCastException:
    Unable to cast object of type 'Good.Students' to type 'Bad.Students'.
   at Bad.Test.Main()
Run Code Online (Sandbox Code Playgroud)

请注意如何在异常中获取完全限定的类型名称.

一般来说,使用它是一个坏主意,as除非你真的希望对象可能不是正确的类型,并且通常你之后会检查它.有关详细信息,请参阅我关于该主题的博客文章.