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

Tho*_*mas 8 .net c# arrays list

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

List<int[]> maskPixels = new List<int[3]>();
Run Code Online (Sandbox Code Playgroud)

它给了我错误:

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

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

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

Nik*_*vic 7

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

List<Color> maskPixels = new List<Color>();
Run Code Online (Sandbox Code Playgroud)

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

Color c = Color.FromArgb(R,G,B); //assuming R,G,B are int values 
Run Code Online (Sandbox Code Playgroud)

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


Mik*_*oud 5

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

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

  • +1`Tuple <T1,T2,T3>`对于固定大小的小数组来说是一个更好的选择. (2认同)
  • 请注意,我认为使用"颜色"结构会更好,如果你是,你知道,代表颜色!:) (2认同)

Moo*_*ice 5

我建议为此拥有自己的值类型:

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

List<Rgb> list = new List<Rgb>;
Run Code Online (Sandbox Code Playgroud)

  • @Arion,nope :)我(相信)OP希望存储一个RGB值列表,而不是一个包含3个RGB值的列表. (5认同)

jas*_*son 5

那是不可能的.想想它只是一秒钟.如果您具有泛型类型,例如List<T>,T是类型参数,并且对于泛型类型的特定实例,则填写类型T.

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

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