2011-09-19 90 views
5

我已經在用戶控件定義如下結構:如何將數據項添加到列表<Struct>

public struct ColumnData 
{ 
    public string ColumnName { get; set; } 
    public string ColumnDataItem { get; set; } 
    public bool ColumnIsHyperLink { get; set; } 
    public string ColumnHyperLinkURL { get; set; } 
    public string ColumnHyperLinkPK { get; set; } 
} 

我創建的List<ColumnData>一個新實例(在後面的是一個不同的代碼創建用戶的實例控制),並希望傳入值,但是如何將它們分配給struct對象中的特定屬性?

我用下面的代碼創建結構的實例:

List<ColumnData> DataItems = new List<ColumnData>(); 
+0

爲什麼你在第一個地方使用結構? – vcsjones

+0

那是一個可變的嗎? –

+4

***真的看起來不像它應該是一個結構......我不認爲結構意味着你*認爲*它的意思。 –

回答

8

將其更改爲類;所有與修改結構屬性(等)有關的問題都將消失。

另外,使其成爲不變結構,並在創建點正確的值初始化它 - 那麼問題是沒有實際意義,無論多少次隨後複製。

IMO第一個是正確的方法在這裏。

1

,所以你需要這樣做:

public void AddToList(ColumnData columnData) 
{ 
    DataItems.Add(columnData); 
} 

,並從其他類通過調用此方法已創建和初始化columnData對象。

15

此:

List<ColumnData> DataItems = new List<ColumnData>(); 

創建一個新的列表。

此:

List<ColumnData> DataItems = new List<ColumnData>(); 
var cd = new ColumnData(); 
cd.ColumnName = "Taco"; 
DataItems.Add(cd); 

創建一個新的列表,一個新的結構,並增加了一個項目列表。

1
List<ColumnData> DataItems = new List<ColumnData>(); 

正在創建保存結構而不是結構本身的列表。

你可以在這裏使用結構,因爲性能方面的原因(比類更快)。

ColumnData data = new ColumnData 
{ 
ColumnName = "Blaa" 
}; 

DataItems.Add(data);