gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:10:03 25 4
gpt4 key购买 nike

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

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/

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