2013-10-09 48 views
0

對象的引用這是我的員工類.NET - 獲取從ListOfObject

public class Employee { 

    public String Name {get ;set ;} 
    public int ID {get ;set ;} 

} 

這是我的員工名單

Public List<Employee> lstEmployee ; 
lstEmployee=new List<Employee>(); 

lstEmployee.Add(new Employee() { Name ="Abc", Id=1}); 
lstEmployee.Add(new Employee() { Name ="Xyz", Id=2}); 
lstEmployee.Add(new Employee() { Name ="Pqr", Id=3}); 

這樣我就可以使用這個

查詢員工
Employee emp = lstEmployee. Where(emp=>emp.ID==1); 

如果我打印emp.Name和emp.ID,我會分別得到Abc和1。

現在我更改值

Emp.Name="Test" 

基於所述本地變量的值將被更新,但名稱的在具有ID lstEmployee爲1的值將保持不變。

有什麼辦法可以獲得對象的引用,所以如果我們改變屬性,那麼它會更新列表。

請原諒我,如果這是一個無意義的。

我相信我可以通過直接應用這個名單來實現這一點,可能就像lstEmployee. Where(emp=>emp.ID==1).Name="Test"

但在我目前的情況下,有一個函數從列表中返回Emp對象,我需要更新回來。所以我想要獲得參考。在此先感謝

+3

給你顯示它*將*更新相同的基準,在該列表中的代碼,目前局部變量只是一個相同的副本。請提供一個*完整的*程序,可以複製您遇到的問題,因爲它是您顯示的代碼不會的。 – Servy

+0

您正在使用Linq-to-SQL或Linq-to-object? – Francis

+0

'員工僱員= lstEmployee。其中(EMP => emp.ID == 1);」如果試圖打印emp.Name,那麼它將返回「Abc」。之後,我更新'emp.Name =「Test」'。然後,如果我嘗試使用lstEmployee進行打印。 Where(emp => emp.ID == 1).Name,它將僅打印爲「Abc」。 – kbvishnu

回答

2

基於所述本地變量的值將被更新,但名稱的在具有ID lstEmployee爲1的值將保持不變。

這是不正確的。唯一的方法是,如果Employee被定義爲struct,而不是class。如果將Employee創建爲類,則本地引用和列表引用將引用相同的對象,並且當您更新本地引用時,還會更新列表中的對象。

此外,從你的問題下面的代碼不應該編譯:

Employee emp = lstEmployee. Where(emp=>emp.ID==1); 

.Where()方法返回一個IEnumerable,而不是一個單獨的對象。您需要更類似的東西:

Employee emp = lstEmployee. Where(emp=>emp.ID==1).First(); 
+0

感謝您的更新。但是你確定如果我更新本地變量,那麼它會更新集合中的值?不要考慮語法,因爲我現在沒有VS。我的辦公室也有類似的問題。是的,我需要使用'First'。否則它返回多個對象。 – kbvishnu

+0

可變結構? Brrrrr .....它也不會解決問題,國際海事組織。 –

+0

@VeeKayBee是的,我相信。我所描述的不會發生的唯一方法是,Employee類型是一個結構而不是一個類。並且將其作爲結構來構建並不是我所推薦的。 –

1

哪裏不會返回一個對象,而是一個集合。我不知道如何從Where(emp=>emp.ID==1).Name="Test"訪問Name屬性。我建議使用FirstOrDefault而不是Where

Employee emp = lstEmployee.FirstOrDefault(emp=>emp.ID==1); 
1

列表已保留引用。

Employee emp = lstEmployee.First(emp=>emp.ID==1); 

這裏emp指向列表中指針的同一個實例。

所以你說的是錯的(ID爲1的lstEmployee中的Name的值將保持不變。) 它將被改變。

+0

謝謝!你是對的 – kbvishnu