2011-11-09 32 views
1

可以說我有下面的類泛型列表修改的屬性值在C#

public class abc 
{ 
    int id; 
    string name; 
} 

我使用這個類的一些數據的收集和我的業務邏輯在其追加一些行。

List<abc> lstData = GetData(); 

現在,如果我不得不修改一些屬性值可以說我想修改名稱屬性與一些值。

string replaceName = 'jay'; 

所以這個jay應該在name屬性列表的每一行中。

該怎麼辦?我認爲這是一個convertAll方法,我們可以使用....

回答

6

ConvertAll通常用來創建一個新的列表,而它聽起來就像你只是想修改現有對象中的屬性。所以,我會用:

foreach (abc value in lstData) 
{ 
    value.name = replaceName; 
} 

(此代碼看起來更地道,如果你使用以下的.NET naming conventions名,順便說一句。)

或者,你可以使用ConvertAll如果你想創建對象:

List<abc> newList = lstData.ConvertAll(old => new abc { 
    id = old.id, 
    name = replaceName 
}); 

這是使用用於代表一個lambda表達式,和對象初始設置在每一個新的對象的屬性。你接近這個的確切方式取決於你的真實課堂。

+0

我想是列表的屬性的其餘部分不應該改變名單的唯一特定屬性應該在所有行被改變。在這種情況下,名稱應該隨任何事物而改變,但ID應保持相同。可以實現嗎? – ankur

+0

@ankur:你有沒有試過第一段代碼?這只是修改列表中所有對象的單個屬性。 –

+0

我試圖做一些這樣的想法int k = 1234; 列表 lst =新列表(); getData g = new getData(); (int i = 0; i <2; i ++) { g.i = i; g.name =「ank」+ i.ToString(); lst.Add(g); } string b =「Rahul」; lst.ConvertAll(s => s.name = b);它正在做這件事。 – ankur

0

你的意思是你想給列表中所有對象的屬性賦值相同的值嗎?如果是的話,那麼你遍歷它:

foreach (var item in lstData) 
{ 
    item.name = "jay"; 
} 
2

使用List.ForEach

lstData.ForEach(x => x.name = "jay"); 
+0

我個人更喜歡使用'foreach',除非有充分的理由使用'ForEach'(例如,我已經*有*代表)。見http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx –

+0

@Jon我有一個主要是C++背景:)從來沒有使用std :: for_each,因爲C++ didn沒有lambda。所以你可以想象!順便讀一下你的書** C#的深度** ..其驚人的。我拿起的第一本編程書沒有教我如何做for/while循環......至少還沒有 –

+0

很高興你在享受它 - 我非常刻意地想寫一本*沒有*開始假設沒有知識:) –

1

您可以使用下面的LINQ運營商的ForEach():

lstData.ForEach(data => data.Name = replaceName); 
0

我覺得在現實生活中,當你想要修改Name,您必須擁有Id,因此根據您可以在列表中找到要修改的單個對象,例如:

abc objAbc =(
    from emp 
    in lstData 
    where emp => emp.Id = someId 
    select emp) 
    .SingleOrDefault();

一旦你有objAbcyou can do objAbc.Name = "New Name"

我希望這是你想知道什麼。你需要使用System.Linq來使用linq-to-object。

快樂編碼