在这样的回电中:
this.Model.LoadStudent(student_key, (o, a) =>
{
var student = o as Students;
如果我在第一行放置了一个断点,调试器会告诉我"o"
有我正在查找的内容,并且还显示了"Students"
的类型,但是只要它转到下一行并且演员阵容,结果是null
。为什么?怎么了?
答案 0 :(得分:6)
您没有投射 - 您正在使用as
运算符。如果你改为实际施放,我怀疑你会得到一个例外:
var student = (Students) o;
我怀疑你实际上有多种名为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 {}
}
这导致:
Unhandled Exception: System.InvalidCastException:
Unable to cast object of type 'Good.Students' to type 'Bad.Students'.
at Bad.Test.Main()
请注意如何在异常中获得完全限定的类型名称。
一般来说,使用as
是个坏主意,除非你确实期望对象可能不是正确的类型,并且通常你之后会检查它。有关详细信息,请参阅my blog post on the topic。
答案 1 :(得分:3)
在这种情况下,您的对象不属于学生类型。如果你转换为错误的类型,以这种方式进行转换将不会抛出错误,只会使对象为空。