[英]declare list of fixed size arrays in c#
我有一個對像素進行操作的功能。 我想用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以獲取每個顏色組件。
你不能像這樣進行數組初始化,而且每個int[]
在技術上可以是不同的大小。 如何使用不同的數據結構List<Tuple<int, int, int>>
?
這將允許您在列表中嚴格地具有三個整數值,並且它可以通過LINQ比數組更快地搜索,因為它是具有屬性的良好定義的結構。
我建議為此擁有自己的值類型:
public struct Rgb
{
int R,
int G,
int B
}
List<Rgb> list = new List<Rgb>;
那是不可能的。 想想它只是一秒鍾。 當您具有泛型類型時,例如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的有效表示!
[Flags]
public enum RGB
{
R,
G,
B
}
...
public List<RGB> l = new List<RGB>();
l.Add(RGB.r | RGB.G)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.