gpt4 book ai didi

c# - 为什么这个从接口(interface)到类的转换失败了?

转载 作者:太空狗 更新时间:2023-10-29 17:28:35 24 4
gpt4 key购买 nike

private Vector2 ResolveCollision(ICollidable moving, ICollidable stationary)
{
if (moving.Bounds.Intersects(stationary.Bounds))
{
if (moving is Player)
{
(Player)moving.Color = Color.Red;
}
}
// ...
}

我有一个类 Player 实现了 ICollidable。出于调试目的,我只是试图将一堆 ICollidables 传递给此方法,并在它是播放器时做一些特殊的事情。但是,当我尝试对 ICollidablePlayer 进行强制转换时,我收到一条错误消息,告诉我 ICollidable 没有 颜色属性。

我是否无法以这种方式进行转换,还是我做错了什么?

最佳答案

我建议使用 as 而不是 is:

Player player = moving as Player;
if (player != null)
{
player.Color = Color.Red;
}

优点是你只做一次类型检查。


您的代码不起作用的具体原因(如其他答案中所述)是因为 operator precedence . . 运算符是一个主要运算符,它比作为一元运算符 的强制转换运算符具有更高的优先级。您的代码解释如下:

(Player)(moving.Color) = Color.Red;

按照其他答案的建议添加括号可解决此问题,但更改为使用 as 而不是 is 会使问题完全消失。

关于c# - 为什么这个从接口(interface)到类的转换失败了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13309644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com