Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这段代码在C#中看起来更干净吗?_C#_Casting_Coding Style - Fatal编程技术网

这段代码在C#中看起来更干净吗?

这段代码在C#中看起来更干净吗?,c#,casting,coding-style,C#,Casting,Coding Style,我有C编程的背景,我习惯于做一些丑陋的事情 在C#中是否有更优雅/可读的方法来执行此缩放操作: 其中“original”是.Net图像类,Image.Width和Image.Height因此是整数。规则除法后跟floor操作(强制转换为int)相当于整数除法。乘法和除法是左结合的。因此,您可以使用更短的代码: ImageProcessing.Resize(original, 80, 80 * original.Height / original.Width); 为了说服您,假设宽度和高度分别为

我有C编程的背景,我习惯于做一些丑陋的事情

在C#中是否有更优雅/可读的方法来执行此缩放操作:


其中“original”是.Net图像类,Image.Width和Image.Height因此是整数。

规则除法后跟floor操作(强制转换为
int
)相当于整数除法。乘法和除法是左结合的。因此,您可以使用更短的代码:

ImageProcessing.Resize(original, 80, 80 * original.Height / original.Width);
为了说服您,假设
宽度
高度
分别为
300和
200。然后,您的代码将执行以下操作:

(int)(200f * (80f / 300f)) = (int)(200f * 0.2666...) = (int)(53.3333...) = 53
我的代码将这样做(其中
/
表示整数除法):


如果您想更改代码(看起来还可以):因为“w/h”是单独计算的,所以可能会生成更多的自文档代码:

var aspectRatio = original.Width / (float)original.Height;
int newWidth = 80;
ImageProcessing.Resize(original, newWidth, (int)(newWidth / aspectRatio));

这些问题最好在@RonBeyer网站上提问。一行程序通常不太适合。我不知道有这样的事情。在任何情况下,你都可以这样问自己:1)它有效吗?2) 我的同事能读懂吗?3) 它可以很容易地重构吗?我猜#3是肯定的,通过单独分解变量,编译器无论如何都会对其进行优化,所以不要害怕使用更多的代码来让事情变得更干净,尤其是像这样的简单计算。C#中的整数除法返回一个int。要使缩放代码工作,您需要进行浮点除法。也许我应该加一句,原稿是Image类型的,因此.Width和.Height都是int。@JohnShedletsky仔细看看我的建议,并尝试一下。乘法发生在除法之前,所以缩放实际上可以很好地工作。哦,我明白了。我永远记不起关联方向或运算符优先级规则。在紧密循环中,您的规则也更好。可能要快很多(10倍?),以避免浮点运算和类型转换。
80 * 200 / 300 = 16000 / 300 = 53
var aspectRatio = original.Width / (float)original.Height;
int newWidth = 80;
ImageProcessing.Resize(original, newWidth, (int)(newWidth / aspectRatio));