【问题标题】:Get error "Cannot convert to null 'Point' because it is a non-nullable value type."收到错误“无法转换为 null 'Point',因为它是不可为空的值类型。”
【发布时间】:2019-02-13 18:32:26
【问题描述】:

对于这么简单的问题,我很抱歉(我已经用谷歌搜索过,但我很困惑,对编程很陌生)

下面的示例代码

  public Point GetRandomWalkableLocationInRoom(Rectangle room)
    {
        if (DoesRoomHaveWalkableSpace(room))
        {
            for (int i = 0; i < 100; i++)
            {
                int x = Game.Random.Next(1, room.Width - 2) + room.X;
                int y = Game.Random.Next(1, room.Height - 2) + room.Y;
                if (IsWalkable(x, y))
                {
                    return new Point(x, y);
                }
            }
        }


        return null;
    }

【问题讨论】:

  • 只需将方法的返回类型更改为Point?。阅读更多关于它的信息here
  • 您不能从此方法返回 null。错误在这里:返回null;你应该总是返回 new Point();或在发生错误时抛出异常。但是你不能返回 null 因为没有办法将 null 转换为 Point()
  • 谢谢,我已经输入了 new Point();这已经成功了!愚蠢的我!
  • 返回new Point(); 似乎会引入一个错误。找不到可步行点返回0、0真的有效吗?

标签: c# non-nullable


【解决方案1】:

在 DoesRoomHaveWalkableSpace(room) 为 false 的情况下,要么抛出异常(如果这适合你的实现),要么返回一些默认值,例如 'new Point(double.NaN, double.NaN)' 或 'new Point (null, null)'。

【讨论】:

  • 或者,使该方法返回一个Point?
  • 我使用了默认值'return new Point();'这已经成功了!谢谢!
猜你喜欢
  • 2014-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
相关资源
最近更新 更多