根据if为两个特性之一指定一个值



在C#中,如果以某种方式泛化属性,是否可以简化这一点?真的很好奇。

Image Crop = new Image("test.jpg");
int Margin = 2;
int Dif = Math.Abs(Crop.Width - Crop.Height);
if (Crop.Width < Crop.Height) {
Crop.X -= Dif / 2;                //
Crop.Width += Dif;                // A
Dif = Crop.Height * Margin * 2;   //
} else {
Crop.Y -= Dif / 2;                //
Crop.Height += Dif;               // B
Dif = Crop.Width * Margin * 2;    // 
}

感觉就像A&B可以被一个函数取代,该函数可以确定是否选择Crops的X&宽度或作物的Y&身高上面的代码运行得很好,但我认为必须有一个更漂亮的方法,但我找不到它

我的一个朋友用IntConsumer&lambda函数,它们成功地简化了A&B转换成一个神奇的函数。不过我不明白。:-(

private static int squarize(int n, int shortBound, int longBound, IntConsumer locSetter, IntConsumer boundSetter, int dif, int margin) {
locSetter.accept(n - dif / 2);
boundSetter.accept(shortBound + dif);
return longBound * margin * 2;
}

要回答您的问题:"在C#中,是否可以通过某种方式概括属性来简化这一点">

不,不是。你的代码非常好。

为了完整性,可以这样做,但需要明确的是:我认为这比原始代码更容易理解。只是";聪明";。

if (Crop.Width < Crop.Height)
(Crop.X, Crop.Width,  Dif) = (Crop.X - Dif / 2, Crop.Width  + Dif, Crop.Height * Margin * 2);
else
(Crop.Y, Crop.Height, Dif) = (Crop.Y - Dif / 2, Crop.Height + Dif, Crop.Width  * Margin * 2);

情人眼里出西施,所以这取决于你是否"Prettier"(

我更喜欢原版。

相关内容

  • 没有找到相关文章

最新更新