根据 if 为 2 个属性之一赋值
Assign a value to one of 2 properties depending on the 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 和 Width,还是 Crops 的 Y 和 Height。上面的代码工作得很好,但我认为必须有更漂亮的方法,但我找不到它。
我的一个朋友做了一些东西,尽管在 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);
仁者见仁,智者见智,“漂亮”就看你了。 ;)
我更喜欢原版。
在 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 和 Width,还是 Crops 的 Y 和 Height。上面的代码工作得很好,但我认为必须有更漂亮的方法,但我找不到它。
我的一个朋友做了一些东西,尽管在 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);
仁者见仁,智者见智,“漂亮”就看你了。 ;)
我更喜欢原版。