我有一个操作像素的函数。我想创建一个包含RGB值的列表,但是当我这样声明它时:
List<int[]> maskPixels = new List<int[3]>();
它给我报错:
变量声明中不能指定数组大小(尝试使用“new”表达式进行初始化)
像这样添加像素:maskPixels.Add(new int[] { Red, Green, Blue });
有没有一种方法可以做到这一点,或者我必须使用new List<int[]>();
?
虽然没有类似的方法,但既然您正在使用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,以获取每个颜色组件。
Color
并不适合做这个 - 但是,此时谁知道呢,这可能是完美的解决方案。 - Moo-Juice这是不可能的。只需要想一想就知道了。当你有一个通用类型,比如说 List<T>
,T
是一个类型参数,对于特定的实例化泛型类型,你需要填充类型 T
。
但是,int[3]
不是一个类型!确切地说,它是 C# 语法中的一个 array-creation-expression
。
Tuple<int, int, int>
。但更好的选择是,我推荐一种专门用于表示 RGB 的类型,比如 System.Drawing.Color
(使用 Color.FromArgb(int, int, int)
)或者你自己定义的类型,如果需要的话。我倾向于后者的原因是,并不是所有的 Tuple<int, int, int>
都是 RGB 的有效表示!我建议为此创建自己的值类型:
public struct Rgb
{
int R,
int G,
int B
}
List<Rgb> list = new List<Rgb>;
List<Tuple<Rgb, Rgb, Rgb>>
吗? - ArionTuple
(.NET 2.0),除了Color
类,我认为这是最好的方法。而且我想这也是非颜色值的唯一方法(结构体)。 - Thomasint[]
在技术上可能是不同的大小。那么换一种不同的数据结构如何?List<Tuple<int, int, int>>
?Tuple<T1,T2,T3>
对于固定大小的小数组来说是一个更好的选择。 - Sergey KalinichenkoTuple
е”ҜдёҖзҡ„й—®йўҳжҳҜдҪ йңҖиҰҒдҪҝз”ЁItem1
пјҢItem2
е’ҢItem3
жқҘеј•з”ЁжҲҗе‘ҳпјҢиҝҷдёҚеӨӘжҳ“иҜ»гҖӮ - Moo-JuiceTuple
类型上的静态Create
方法,即使用:maskPixels.Add(Tuple.Create(Red, Green, Blue));
。因为如果每次都要输入<int,int,int>
,你会抓狂的。 - Jeppe Stig Nielsen [Flags]
public enum RGB
{
R,
G,
B
}
...
public List<RGB> l = new List<RGB>();
l.Add(RGB.r | RGB.G)
struct
更加友好。 - Thomas
List<Color>
。但是为了提供另一种选择:您是否考虑过int[,]
或int[,,]
(即多维数组;后者对于存储 x、y 和颜色可能很有用)?与锯齿状数组 (int[][]
) 或 数组列表 (List<int[]>
) 不同,它们始终是矩形/立方体的,即您无法具有不同数量的元素。 - Tim S.