C#中调用Enum.GetValues<KnownColor>()报错,该如何解决?
解决Enum.GetValues()报错的方法
错误原因
你使用的.NET版本低于**.NET 5**,此时Enum类仅提供非泛型的GetValues(Type)方法,不存在泛型重载GetValues<T>(),因此不能通过添加类型实参的方式调用。
解决方案
有两种处理方式:
方式一:升级项目到.NET 5或更高版本
如果项目允许升级框架版本,直接保留原代码即可,泛型版Enum.GetValues<KnownColor>()在.NET 5及以上版本中是原生支持的。
方式二:改用非泛型方法并转换类型
如果无法升级框架,将泛型调用替换为非泛型的Enum.GetValues(typeof(KnownColor)),再通过Cast<KnownColor>()转换为强类型枚举集合:
修改后的代码如下:
private void GetNames() { Color originColor = Color.FromArgb(255, 206, 206, 206); // Simplest, but not necessary the best one int Distance(Color left, Color right) => Math.Abs(left.R - right.R) + Math.Abs(left.G - right.G) + Math.Abs(left.B - right.B) + Math.Abs(left.A - right.A); var result = Enum .GetValues(typeof(KnownColor)) .Cast<KnownColor>() .MinBy(color => Distance(Color.FromKnownColor(color), originColor)); }
注意需确保代码顶部引用了using System.Linq;,因为Cast<T>()和MinBy()属于LINQ扩展方法。
内容的提问来源于stack exchange,提问作者Daniel Lip
相关产品推荐
相关产品推荐

