0
// Check if the new position is on an arrow
foreach (Item Item in GetFloorItems())
{
    if (Item.Definition.SpriteId == 5000)
    {
        if (Actor.PositionToSet.X == Item.RoomPosition.X && Actor.PositionToSet.Y == Item.RoomPosition.Y)
        {
            Session Session = SessionManager.GetSessionByCharacterId(Actor.ReferenceId);
            ItemEventDispatcher.InvokeItemEventHandler(Session, Item, this, ItemEventType.Interact, Actor.MoveToAndInteractData);
        }
    }
}

错误行:if (Actor.PositionToSet.X == Item.RoomPosition.X && Actor.PositionToSet.Y == Item.RoomPosition.Y)

抱歉,我是 C# 新手。以前有这个问题,我似乎看不出有什么问题,虽然它在不同的行上,我所要做的就是检查它是否为空,但在这里看不到很多相同的地方吗?

4

2 回答 2

0
if (Actor != null )
{
    if(Actor.PositionToSet != null )
    {
        if(Actor.PositionToSet.X == Item.RoomPosition.X && 
           Actor.PositionToSet.Y == Item.RoomPosition.Y) {
            // Do your stuff
        }
    }
}
于 2013-11-10T06:09:48.533 回答
0

这可能会奏效。切换 if 从

if (Actor.PositionToSet.X == Item.RoomPosition.X && Actor.PositionToSet.Y == Item.RoomPosition.Y)

对此:

if (Actor != null && Actor.PositionToSet != null && Actor.PositionToSet.X == Item.RoomPosition.X && Actor.PositionToSet.Y == Item.RoomPosition.Y)

当您尝试查看为 null 的对象的属性时,您将收到此错误。原因是空对象没有属性(ish)。如果 Actor 为空,则无法查看 Actor.PositionToSet。如果 Actor 不为 null,则可以查看属性 PositionToSet,但如果为 null,则无法查看属性 X 和 Y。我希望这是有道理的,但只需添加任何其他问题的评论。

于 2013-11-10T06:02:24.477 回答