我今天正在查看一些代码并看到如下内容:
var colour = Color.FromArgb(((int)(((byte)(227)))), ((int)(((byte)(213)))), ((int)(((byte)(193)))));
当我问为什么会这样时,由于Resharper确认所有的演员阵容都是多余的,我被告知设计师这样做了,他们已经复制了。
我看了一下,确定Designer在将属性设置为自定义颜色时生成与上面相同的代码。
有谁知道设计师为什么会这样做?除非我遗漏了什么,否则它看起来似乎没有意义?
答案 0 :(得分:9)
此代码由Winforms设计器中内置的代码序列化程序自动生成。这里的有罪方是System.Drawing.ColorConverter类,TypeConverter for Color。 ConvertTo()方法中的相关代码是:
member = typeof(Color).GetMethod("FromArgb", new Type[] { typeof(int), typeof(int), typeof(int) });
arguments = new object[] { color2.R, color2.G, color2.B };
R,G和B属性返回一个字节。因此,代码序列化程序首先生成整数文字并应用(byte)强制转换以匹配参数类型。然后看到FromArgb()接受整数参数,所以应用(int)强制转换。
这只是疯狂机器生成的代码。它必须是正确的,它不一定非常漂亮。
答案 1 :(得分:5)
没有任何好处。它只是让代码难以阅读。
这是优选的
var colour = Color.FromArgb(227, 213, 193);
甚至是alpha通道版本:
var colour = Color.FromArgb(255, 227, 213, 193);
正如@Alexei Levenkov指出的那样,也许作者是谨慎的,但鉴于该方法的明确名称及其(众所周知的)预期用途,为什么有人会使用大于255的值来获取任何参数?