簡體   English   中英

C#-列表清單

[英]C# - List of Lists

我使用C#進行編碼,並且具有一個類,其屬性類型為List <List <T >>,該類在構造函數中初始化。 代碼如下:

public class MyMatrix<T>
{
    private readonly List<List<T>> matrix;

    public MyMatrix(int dimension)
    {
        this.matrix = new List<List<T>>();
        for (int i = 0; i < dimension; i++)
        {
            List<T> subList = new List<T>();
            this.matrix.Add(subList);
        }
    }
    .....

問題是,如果我創建一個MyMatrix類型的新對象,則子列表為空,因此,如果我調用該類的ToString()方法或其他任何返回子列表中包含的值的方法,則會得到OutOfOrder異常。 Get和Set方法如下:

public T Get(int row, int column)
    {
        return this.matrix[row][column];
    }

public void Set(int row, int column, T value)
    {
        this.matrix[row].Insert(column, value);
    }

如果我使用Set方法初始化子列表,那么一切都很好。 我不能更改構造函數,因為要由類的用戶來初始化子列表,因此無法事先知道它們將包含什么。 您將如何在類方法中管理異常,或者根本不打擾?

C#6.0呢?

public T Get(int row, int column)
{
    return this.matrix[row]?[column] ?? default(T);
}

在您的情況下,有幾種方法可以管理異常,這取決於您要如何使用矩陣類:

  1. 如果您希望用戶在不初始化行/列的情況下設置值,那么在Set方法上,如果需要適應行/列參數,我將調整列表的大小。 您始終可以使用default(T)在列表中插入空項目(這適用於值對象和引用對象)。 在這種情況下,Get方法應檢查矩陣坐標是否存在,否則返回default(T)以便不發生異常。

  2. 如果您希望用戶始終初始化矩陣,則只需保持原樣並引發異常即可。 這明確表明應用程序行為異常,程序員必須注意這一點。

  3. 如果嘗試實現稀疏矩陣之類的方法 ,則使用List<T>並不是最佳方法,應嘗試另一種方法-例如,使用Dictionary<int, Dictionary<int, T>>或某種形式的鏈表。 無論如何,在這種情況下,如果您選擇使用Dictionary方法,則仍需要做出與上述相同的決定(即,如果訪問不存在的坐標或僅返回default(T)拋出)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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