c# - 哪个代码更干净、更快或更优雅/更可取?是否已经有执行此操作的功能?

标签 c# xna

我写这两个都是为了校正矩形。例如,如果一个矩形具有这些属性:

X:32, Y:32, 宽:-32, 高:-32

这将使矩形 X:0, Y:0, 宽度:32, 高度:32

if (r.Width < 0)
{
    r.X -= Math.Abs(r.Width);
    r.Width = Math.Abs(r.Width);
}
if (r.Height < 0)
{
    r.Y -= Math.Abs(r.Height);
    r.Height = Math.Abs(r.Height);
}

这是#2

r.X -= Math.Abs(Math.Min(0, r.Width));
r.Width = Math.Abs(r.Width);

r.Y -= Math.Abs(Math.Min(0, r.Height));
r.Height = Math.Abs(r.Height);

它们都工作得很好。我的问题是哪个?我觉得第一个可能更快,更易读,但第二个代码行更少。另外,我觉得这可能已经被发明出来了。 .NET 或 XNA Framework 中是否已有执行此操作的方法?

谢谢!!

编辑:有人发布了我非常喜欢的第二种方式的简化版本,并将其组合成这个:

r = new Rectangle(r.X + Math.Min(0, r.Width), r.Y + Math.Min(0, r.Height), Math.Abs(r.Width), Math.Abs(r.Height));

老实说,我更喜欢少行而不是多行,而且我认为这不会太复杂。如果有任何问题,我可以发表评论或将其封装到具有描述性名称的方法中。

最佳答案

如果您知道 r.Width 和 r.Height < 0,为什么您需要对它们进行 Abs 处理?删除它,它会更快,更简单。

if (r.Width < 0)
{
    r.X += r.Width;
    r.Width = -r.Width;
}
if (r.Height < 0)
{
    r.Y += r.Height;
    r.Height = -r.Height;
}

恕我直言,您编写的第二种执行此操作的方式简直丑陋。你不用看它就立刻意识到它在做什么。记住 KISS。

编辑:我知道你喜欢尽可能少的代码,所以我重新设计了上面的代码:

if (r.Width < 0) { r.X += r.Width; r.Width = -r.Width; } if (r.Height < 0) { r.Y += Height; r.Height = -r.Height; }

就这么简单 - 全部在一行代码中!与您的替代方案相比,它的在线字符更少......

行数通常不是衡量编程美感的好方法 - 但当然这是您的代码,所以您必须选择给您带来最大乐趣的东西。

关于c# - 哪个代码更干净、更快或更优雅/更可取?是否已经有执行此操作的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6967951/

相关文章:

c# - 实现 JavaScript 代码与控制台应用程序 C# 之间的通信

c# - 如何为我的 C# XNA 游戏制作 GUI?

c# - 尝试使用 C# 生成 excel 文件时出现错误“类未注册”

C# - 将 Nullable<T> 公开给 COM 的好方法

c# - Sprite 批处理: "Begin cannot be called again until End has been successfully called."

c# - 是否可以在自定义 XNA 内容处理器中定义 Assets 名称?

c# - 大量物体的碰撞检测

c# - 在 XNA 中对网格进行排序

c# - 具有字段级类型转换的 AutoMapper.ProjectTo

c# - WPF 文本进入和退出过渡效果