微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据是否将值分配给2个属性之一

如何解决根据是否将值分配给2个属性之一

在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可以由确定是否选择“作物”的“ X和宽度”或“作物的Y和高度”的函数代替。上面的代码可以正常工作,但是我认为必须有一种更漂亮的方法,但我找不到它。

尽管在Java中,我的一个朋友还是使用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);

美容在情人眼中,因此,如果这是“漂亮”,则取决于您。 ;)

我更喜欢原始照片。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。