2016-06-17 10 views
-3

は、現在、私がやっている:範囲内の整数を保持しますか?一定の範囲内の整数を保つために

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; 

は、境界チェックのためのクリーンな方法はありますか?

+0

それはを見て混乱です。それはあなたの質問に答えるのに役立ちますか?私はdownvoteに同意しない。 –

答えて

2

あなたはこのような何か考えることができ(ないパフォーマンスが):

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)); 
1

あなたが構造的アプローチを目指す場合は、catualチェックを考慮するために拡張メソッド

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); 
    } 
} 

を使用することができます。コンパクトさのために

関連する問題