9

我有一个对像素进行操作的函数。我想创建一个包含 RGB 值的列表,但是当我这样声明时:

List<int[]> maskPixels = new List<int[3]>();

它给了我错误:

不能在变量声明中指定数组大小(尝试使用“新”表达式进行初始化)

添加像素是这样完成的:maskPixels.Add(new int[] { Red, Green, Blue });

有没有办法做到这一点,或者我必须new List<int[]>();改用?

4

5 回答 5

8

没有办法做类似的事情,但既然你用它来表示 RGB 值,你为什么不使用Colorclass 代替呢?

List<Color> maskPixels = new List<Color>();

并像这样初始化每个颜色:

Color c = Color.FromArgb(R,G,B); //assuming R,G,B are int values 

如果您的值在 0-255 范围内,这是最自然的存储方式。您有预定义的 getter 和 setter 来获取每个颜色分量。

于 2013-06-10T13:28:03.690 回答
6

那是不可能的。想一想。当你有一个泛型类型时,比如说List<T>T是一个类型参数,并且对于泛型类型的特定实例,你填写一个 type T

int[3]不是类型!准确地说,它是array-creation-expressionC# 语法中的一个。

如果您想限制为只能包含三个值的类型,我可以建议您作为第一次切割Tuple<int, int, int>吗?但更好的是,我推荐一种专用于表示RGB 的类型,例如System.Drawing.Color(使用Color.FromArgb(int, int, int))或您自己的自定义类型(如有必要)。我倾向于后者的原因是因为并非所有Tuple<int, int, int>都是 RGB 的有效表示!

于 2013-06-10T13:30:13.763 回答
5

您不能像这样进行数组初始化,而且int[]从技术上讲,每个数组的大小都可能不同。不同的数据结构List<Tuple<int, int, int>>怎么样?

这将允许您在列表中严格包含三个整数值,并且可以通过 LINQ 比数组更快地搜索它,因为它是具有属性的定义明确的结构。

于 2013-06-10T13:24:57.887 回答
5

我建议为此使用您自己的值类型:

public struct Rgb
{
    int R,
    int G,
    int B
}

List<Rgb> list = new List<Rgb>;
于 2013-06-10T13:27:23.007 回答
-1
 [Flags]
    public enum RGB
    {
        R,
        G,
        B
    }

...

public List<RGB> l = new List<RGB>();
l.Add(RGB.r | RGB.G)
于 2013-06-10T14:22:34.893 回答