[英]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);
}
在您的情況下,有幾種方法可以管理異常,這取決於您要如何使用矩陣類:
如果您希望用戶在不初始化行/列的情況下設置值,那么在Set方法上,如果需要適應行/列參數,我將調整列表的大小。 您始終可以使用default(T)
在列表中插入空項目(這適用於值對象和引用對象)。 在這種情況下,Get方法應檢查矩陣坐標是否存在,否則返回default(T)
以便不發生異常。
如果您希望用戶始終初始化矩陣,則只需保持原樣並引發異常即可。 這明確表明應用程序行為異常,程序員必須注意這一點。
如果嘗試實現稀疏矩陣之類的方法 ,則使用List<T>
並不是最佳方法,應嘗試另一種方法-例如,使用Dictionary<int, Dictionary<int, T>>
或某種形式的鏈表。 無論如何,在這種情況下,如果您選擇使用Dictionary方法,則仍需要做出與上述相同的決定(即,如果訪問不存在的坐標或僅返回default(T)
拋出)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.