【发布时间】:2020-09-25 14:45:59
【问题描述】:
是否有可能在 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;
}
【问题讨论】:
-
虽然可以用它做一些聪明的事情,但我认为它实际上不会让它变得更简单或更清晰。
-
有时你只需要写出代码
-
我可以想到一种使用反射的方法,但它不会像您当前的代码那样清晰或快速。
-
忘记了一点故事......谢谢到目前为止的回复,这也是我的想法。