Gle*_*enn 5 c# designer colors winforms
我今天正在查看一些代码并看到如下内容:
var colour = Color.FromArgb(((int)(((byte)(227)))), ((int)(((byte)(213)))), ((int)(((byte)(193)))));
Run Code Online (Sandbox Code Playgroud)
当我问为什么会这样时,由于Resharper确认所有的演员都是多余的,我被告知设计师这样做了,他们已经复制了.
我看了一下,确定Designer在将属性设置为自定义颜色时生成与上面相同的代码.
有谁知道设计师为什么会这样做?除非我遗漏了某些内容,否则它看起来似乎没有意义?
此代码由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 };
Run Code Online (Sandbox Code Playgroud)
R,G和B属性返回一个字节.因此,代码序列化程序首先生成整数文字并应用(byte)强制转换以匹配参数类型.然后看到FromArgb()接受整数参数,因此应用(int)强制转换.
这只是疯狂机器生成的代码.它只需要是正确的,它不一定非常漂亮.
没有任何好处.它所做的就是让代码难以阅读.
这是优选的
var colour = Color.FromArgb(227, 213, 193);
Run Code Online (Sandbox Code Playgroud)
甚至是alpha通道版本:
var colour = Color.FromArgb(255, 227, 213, 193);
Run Code Online (Sandbox Code Playgroud)
正如@Alexei Levenkov指出的那样,也许作者是谨慎的,但鉴于该方法的明确名称及其(众所周知的)预期用途,为什么有人会使用大于255的值来获取任何参数?