【问题标题】:Keep an integer within bounds? [duplicate]将整数保持在范围内? [复制]
【发布时间】:2016-06-17 22:55:45
【问题描述】:

为了使整数保持在一定范围内,目前我正在做:

frame.X = frame.X <= 0 ? 0 : frame.X;
frame.X = frame.X + frame.Width > Image.Width ? Image.Width - frame.Width : frame.X;

frame.Y = frame.Y <= 0 ? 0 : frame.Y;
frame.Y = frame.Y + frame.Height > Image.Height ? Image.Height - frame.Height : frame.Y;

有没有更简洁的边界检查方法?

【问题讨论】:

  • 看起来很混乱。这有助于回答你的问题吗?我不同意投反对票。

标签: c#


【解决方案1】:

为了紧凑(虽然不是性能),您可以考虑这样的事情:

frame.X = Math.Min(Image.Width - frame.Width, Math.Max(0, frame.X));
frame.Y = Math.Min(Image.Height - frame.Height, Math.Max(0, frame.Y));

【讨论】:

    【解决方案2】:

    如果你的目标是结构化方法,你可以使用扩展方法

    public static class IComparableExtensions
    {
    
        public static T Min<T>(this T a, T b) where T : IComparable<T>
        {
            return a.CompareTo(b) < 0 ? a : b;
        }
    
        public static T Max<T>(this T a, T b) where T : IComparable<T>
        {
            return a.CompareTo(b) > 0 ? a : b;
        }
    
        public static T Clip<T>(this T a, T Min, T Max) where T : IComparable<T>
        {
            return a.Max(Min).Min(Max);
        }
    }
    

    排除实际检查。

    【讨论】:

      猜你喜欢
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多