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#初心者です。以前にこの問題がありましたが、何が問題なのかわかりません。別の行にありましたが、null かどうかを確認するだけで済みましたが、ここでは同じことがあまり見られませんか?

4

2 に答える 2

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 のオブジェクトのプロパティを見ようとすると、このエラーが発生します。その理由は、null オブジェクトにはプロパティがない (っぽい) ためです。Actor が null の場合、Actor.PositionToSet を見ることはできません。Actor が null でない場合は、プロパティ PositionToSet を確認できますが、それが null の場合、プロパティ X と Y は確認できません。それが理にかなっていることを願っていますが、追加の質問がある場合はコメントを追加してください.

于 2013-11-10T06:02:24.477 に答える
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 に答える