在c#中声明固定大小数组的列表

时间:2013-06-10 13:22:59

标签: c# .net arrays list

我有一个对像素进行操作的功能。我想用RGB值创建一个列表,但是当我以这种方式声明它时:

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

它给了我错误:

  

无法在变量声明中指定数组大小(尝试使用'new'表达式初始化)

添加像素的方式如下:maskPixels.Add(new int[] { Red, Green, Blue });

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

5 个答案:

答案 0 :(得分:7)

没有办法做类似的事情,但由于你将它用于RGB值,为什么不使用Color类呢?

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

并按照以下方式初始化每个颜色:

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

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

答案 1 :(得分:5)

你不能像这样进行数组初始化,而且每个int[]在技术上可以是不同的大小。如何使用不同的数据结构List<Tuple<int, int, int>>

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

答案 2 :(得分:5)

我建议您拥有自己的价值类型:

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

List<Rgb> list = new List<Rgb>;

答案 3 :(得分:5)

那是不可能的。想想它只是一秒钟。如果您使用泛型类型,例如List<T>,则T是类型参数,对于泛型类型的特定实例,您需要填写T类型。

但是int[3] 不是类型!确切地说,它是C#语法中的 array-creation-expression

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

答案 4 :(得分:-1)

 [Flags]
    public enum RGB
    {
        R,
        G,
        B
    }

...

public List<RGB> l = new List<RGB>();
l.Add(RGB.r | RGB.G)