c# - 根据 if 为 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);
美丽在情人眼中,所以这是否“更漂亮”取决于你。;)
我更喜欢原版。
推荐阅读
- jmeter - 从标题中提取JMeter边界
- sql-server - Azure 函数 - 从 Azure sql server 中的 blob 存储导入 bacpac 文件 - AAD 令牌
- http - 在 NGINX 中使用 GET 请求自动将 Bot IP 列入黑名单
- python - 网页抓取时如何省略一些结果?
- javascript - 打印按钮 onClick 的值
- infinite-scroll - Ag Grid 单元格渲染器直到在视图中滚动后才被实例化
- reverse-proxy - 当 IIS 反向代理后面的 Identityserver4 时,没有重定向回 JsOidc 客户端
- javascript - 如何通过角度以表格格式打印数组对象?
- javascript - 如何危险地设置 idSetInnerHTML?
- r - 读取,子集“选择”并在R中写入txt文件