2012-04-16 93 views
3

我有一個公共類叫Profile。非常簡單的模型類目前有2個屬性; string Namestring Fields。在我開發這個項目時,班級將擴大,但目前並不特別重要。這是可能與IList

我有一個Global static IList類型Profile調用Profiles。我對這些IEnumerable類型中的數據進行操作相當新,但我正在尋找更新單個配置文件的其中一個屬性。我嘗試了以下,但我收到一個對象引用沒有設置異常。以下是我設置屬性:

Profiles.Single(x => x.Name == listBoxProfiles.Text).Fields = textBoxFieldName.Text; 

調試器的顯示列表框和文本框的文本屬性都具有正確的價值觀,所以我認爲這是我使用單,這是錯誤的方式。

如果任何人都可以擺脫一些光,我將不勝感激。

+0

其實很好的問題,+1。 – SkonJeet 2012-04-16 08:25:16

+0

@RoyDictus - 「我收到一個對象引用沒有設置異常」 – SkonJeet 2012-04-16 08:25:36

+0

如果在線上添加一個斷點並在調試時在立即窗口中只運行'Profiles.Single(x => x.Name == listBoxProfiles.Text)'' ,你有配置文件嗎?聽起來好像沒有名稱與您的價值相符的配置文件。 – 2012-04-16 08:25:44

回答

1

一個簡單的修正,使代碼更是防守的所有要求:

var profile = Profiles.SingleOrDefault(x => x.Name == listBoxProfiles.Text); 

if (profile != null) 
{ 
    profile.Fields = textBoxFieldName.Text; 
} 
else 
{ 
    Profiles.Add(new Profile(textBoxFieldName.Text)); 
} 

該代碼將與缺失值處理,SingleOrDefault預計要返回0或1項。如果發現超過1個項目,它將引發異常。

如果你知道你的代碼應該總是有你正在尋找的項目,那麼你的代碼將工作 - 但我建議反對這種編程風格,而不是稍微防禦一點。

+0

謝謝你的回答亞當。爲了迴應你的最後一點,如果我可以得到表達式來更新列表,那麼是的,我知道它會一直工作。在此方法的早期,我檢查是否選擇了有效的配置文件,並且文本框中還有某些內容。 你的代碼已經工作,我已經標記相應 - 非常感謝你! 出於興趣,我不知道變量配置文件如何更新此列表?我認爲這只是一個單獨的變量。結果類型是否使它成爲列表的一個實例,然後進行更新? – Compunutter 2012-04-16 09:05:36

+0

@Govix如果我理解正確:變量'profile'(從列表返回)只是對基礎對象的引用。您更新此基礎對象上的'Fields',並且列表和本地變量都「查看」更新,因爲它們的引用指向相同的基礎對象。 – 2012-04-16 09:09:33

+0

非常感謝!這正是我想知道的。所有變量是從方法引用還是IEnumerable結果返回? – Compunutter 2012-04-16 09:37:11