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[]>();?
没有办法做类似的事情,但由于你将它用于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以获取每个颜色组件.
你不能像这样进行数组初始化,而且int[]技术上每个都可以是不同的大小.不同的数据结构List<Tuple<int, int, int>>怎么样?
这将允许您在列表中严格地具有三个整数值,并且它可以通过LINQ比数组更快地搜索,因为它是具有属性的良好定义的结构.
我建议为此拥有自己的值类型:
public struct Rgb
{
int R,
int G,
int B
}
List<Rgb> list = new List<Rgb>;
Run Code Online (Sandbox Code Playgroud)
那是不可能的.想想它只是一秒钟.如果您具有泛型类型,例如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的有效表示!
| 归档时间: |
|
| 查看次数: |
4417 次 |
| 最近记录: |