您好,我在理解为什么这段代码时遇到了问题:
using System;
class Person
{
public Person()
{
}
}
class NameApp
{
public static void Main()
{
Person me = new Person();
Object you = new Object();
me = you as Person;
//me = (Person) you;
System.Console.WriteLine("Type: {0}", me.GetType()); //This line throws exception
}
}
引发此异常:
未处理的异常:System.NullReferenceException:未将对象引用设置为对象的实例。 at NameApp.Main()in C:\ Users \ Nenad \ documents \ visual studio 2010 \ Projects \ Exercise 11.3 \ Exercise 11.3 \ Program.cs:line 21
答案 0 :(得分:2)
你的行
me = you as Person;
失败并将null赋给me
,因为您无法将基类类型对象强制转换为子类。
as运算符就像一个强制转换操作。但是,如果转换 是不可能的,因为返回null而不是引发异常。
您可能希望将person
转换为object
,因为me
是Object
,但you
不是人。
答案 1 :(得分:2)
此代码始终将me
设置为空
Object you = new Object();
me = you as Person;
因为Obejct
不是人
但是人是object
:
object you = new Person();
me = you as Person;
答案 2 :(得分:1)
Object you = new Object();
me = you as Person;
you
是一个对象,而不是一个Person,因此you as Person
将只返回null。
答案 3 :(得分:1)
me = you as Person;
me
null
如果you
无法投放到Person
(这就是您所处的情况,因为new Object()
无法投放到Person
1}}。
答案 4 :(得分:1)
如果对象不是您请求的类型,则as运算符返回null。
me = you as Person;
你是一个Object,而不是一个Person,所以(你作为Person)是null,因此我是null。之后你在我身上调用GetType()时,你会得到一个NullReferenceException。
答案 5 :(得分:1)
public static void Main()
{
Person me = new Person();
Object you = new Object();
// you as person = null
me = you as Person;
//me = (Person) you;
System.Console.WriteLine("Type: {0}", me.GetType()); //This line throws exception
}
答案 6 :(得分:1)
无法将对象强制转换为Person。 它是面向对象编程的原理。
Object是Person的父类。 每个类都继承它,
您可以将Person转换为Object,但不能将Object强制转换为Person
答案 7 :(得分:1)
如果使用as
关键字进行投射并且无法投射,则会返回null
。
然后,在您的情况下,您此时调用me.GetType()
me
为null
,因此会抛出异常。
如果您像(Person) objectOfTypeThatDoesNotExtendPerson
一样投射,则会立即抛出异常。