C#中Hex转RGB结果无法适配Crayon库Rgb()方法的问题
解决Crayon库Rgb()方法传入Hex转换结果报错的问题
问题原因
你的HexToRGBColour方法返回的是逗号分隔的字符串,但Crayon的Output.Rgb()方法要求传入三个独立的byte类型参数(分别对应红、绿、蓝通道)。直接传递字符串无法被方法识别为三个参数,因此触发CS7036错误。
解决方案
修改Hex转RGB的方法,直接返回三个byte类型的颜色分量(用元组封装多个返回值),这样就能直接匹配Rgb()方法的参数要求。
优化后的代码
using Crayon; // 转换Hex为RGB分量(返回元组) static (byte r, byte g, byte b) HexToRgb(string hex) { // 移除Hex字符串开头的#号(如果存在) hex = hex.TrimStart('#'); // 校验输入格式,避免索引越界 if (hex.Length != 6) throw new ArgumentException("Hex颜色码必须为6位(可带#前缀)", nameof(hex)); // 解析十六进制子串为byte类型的颜色分量 byte r = Convert.ToByte(hex.Substring(0, 2), 16); byte g = Convert.ToByte(hex.Substring(2, 2), 16); byte b = Convert.ToByte(hex.Substring(4, 2), 16); return (r, g, b); } // 调用示例 var (red, green, blue) = HexToRgb("#B38D1E"); Console.WriteLine($"{Output.Rgb(red, green, blue).Text("Preview of the colour")}");
额外说明
- 元组返回值支持解构赋值,可以直接将三个分量赋值给独立变量,完美适配
Rgb(byte, byte, byte)的参数列表。 - 使用
Convert.ToByte直接转换十六进制字符串,省去了先转int再强转的步骤,代码更简洁高效。 - 增加输入格式校验,能提前拦截非法的Hex颜色码,避免运行时出现索引越界异常,提升代码健壮性。
内容的提问来源于stack exchange,提问作者Oo'-
相关产品推荐
相关产品推荐

