首页 > 解决方案 > 无法从“ListMapColor.MyContainer”转换为“System.Drawing.Color”

问题描述

我试着用 Hashset 添加一个列表。

我想做什么?我正在尝试映射 Haset Color 一些图像

为什么 ?因为我想实时比较 Hashset 列表颜色,我需要我自己的库来实时快速获取进程以比较图像

你研究过互联网吗?是的,但我没有找到关于使用 ADD 使用哈希集颜色的信息。

我做了例子有人可以帮助请。

public class ListMapColor
{


    public class MyContainer
    {
        public Color Number { get; set; }
        public Color Name { get; set; }
        public MyContainer(Color number, Color name)
        {
            Number = number;
            Name = name;
        }
    }

    public HashSet<Color> Battle(HashSet<Color> colors)
    {

        return colors.Add( new MyContainer (Color.FromArgb(255, 47, 47, 47), Color.FromName("ff2f2f2f") );

    }


}

标签: c#colorshashset

解决方案


在发布的原始代码中,您有一个类型错误,这正是异常告诉您的内容。它需要一个 Color 对象,而您正在给它一个 MyContainer 对象,并且无法在两者之间进行转换。

我的评论建议将您的代码更改为以下内容:

public class ListMapColor
{


   public class MyContainer
   {
       public Color Number { get; set; }
       public Color Name { get; set; }
       public MyContainer(Color number, Color name)
       {
           Number = number;
           Name = name;
       }
   }

   public HashSet<MyContainer> Battle(HashSet<MyContainer> colors)
   {

       return colors.Add( new MyContainer (Color.FromArgb(255, 47, 47, 47), Color.FromName("ff2f2f2f") );

   }


}

这将修复类型错误。如果你想要一个 Color 对象的 HashSet,你需要添加 Color 对象,而不是 MyContainer 对象。

我不确定您为什么要这样做。

似乎您可能想要以下内容:

    HashSet<Color> myColors = new HashSet<Color>();

    myColors.Add(Color.FromArgb(255,47,47,47));
    myColors.Add(Color.FromName("ff2f2f2f"));
    myColors.Add(Color.FromName("AliceBlue"));

然后您可以访问您可能需要的所有 Color 方法:

    foreach(Color color in myColors)
    {
        Console.WriteLine(color.Name);
        Console.WriteLine(color.IsKnownColor);
        Console.WriteLine(color.ToArgb());
        Console.WriteLine(color.IsNamedColor());
    }

推荐阅读