我是C#的新手,并且在这里搜索了这个主题。我想我错过了一些基本的东西,如果这是一个愚蠢的问题,请道歉。
我有两个对象FullAlbum和Album。 FullAlbum继承自Album。我试图将Album对象转换为FullAlbum对象,以便我可以使用它。我认为这就像“向下倾倒”一样简单。它从Album到FullAlbum但是我无法让它工作,我得到一个运行时错误,表示它无法从一个转换为另一个。
我已经有一个Album对象_album,它在我调试时填充。我正在尝试;
FullAlbum _fullAlbum = new FullAlbum();
_fullAlbum = _album as FullAlbum;
我希望将所有属性从_album复制到FullAlbum。我错过了这一点吗?
答案 0 :(得分:0)
您始终可以将FullAlbum强制转换为相册,即将特定对象视为更通用的类型。另一种方法并不能保证有效。没有复制任何属性,您只需指定程序查看变量的方式(可以说在哪个角度下)。
编辑:可以将Album转换为FullAlbum并使其在编译时工作,但是在运行时它只有在FullAlbum实际存储在该Album变量中时才有效。否则会抛出运行时错误。
示例:
class A { }
class B: A { }
//this will work
var A = new B();
var B = (B)A;
//but not this
var A = new A();
var B = (B)A;
答案 1 :(得分:0)
FullAlbum _fullAlbum = new FullAlbum();
_fullAlbum = _album as FullAlbum;
这不符合您的期望。 as
运算符说“如果此对象实际上是FullAlbum,则返回一个FullAlbum指针,否则返回null”。它不是复制或转换操作。
你说你想'将一个专辑对象转换成一个fullalbum对象'你不能通过魔法来做到这一点,你必须创建一个FullAlbum对象并填充它。
'as'运算符只是为了恢复这个实际上已经是FullAlbum对象的事实,你有一个Album指针。