簡體   English   中英

在c#中聲明固定大小數組的列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM