簡體   English   中英

LINQ - 返回非空對象的屬性值

[英]LINQ - Returning value of a property of an object that is not null

我有一個包含Person對象的對象列表,該對象可能為null。 我想要做的是獲取非空的第一個Person對象的Name屬性的值,如果所有Person對象都為null,則返回一個空字符串。

我最好的嘗試如下:

    string userName = MyObjectList.FirstOrDefault(x => x.Person != null).Person.Name ?? string.Empty;

我想我明白為什么這不起作用; 如果Person對於列表中的每個對象都為null,那么我們得到默認值,該值為null,當我嘗試訪問屬性Person時將拋出一個空引用錯誤。

我可以通過檢查是否有任何對象不是null然后得到第一個來獲得我想要的結果,但我寧願在一個LINQ語句中完成它。 任何意見都表示贊賞,謝謝。

通常的技巧看起來像這樣:

string userName = MyObjectList.Where(x => x.Person != null)
                              .Select(x => x.Person.Name)
                              .FirstOrDefault() ?? string.Empty;

或者遵循Servy的建議

string userName = MyObjectList.Where(x => x.Person != null)
                              .Select(x => x.Person.Name)
                              .DefaultIfEmpty(string.Empty)
                              .First();

使用C#6的空條件運算符更新它現在相對容易:

string userName = MyObjectList.FirstOrDefault(x => x.Person != null)?.Person.Name ?? string.Empty;

我會這樣做兩個陳述:

var personContainer = MyObjectList.FirstOrDefault(x => x.Person != null);
string userName = personContainer == null ? string.Empty : personContainer.Person.Name;

您正在訪問一個null對象並嘗試讀取其屬性。

看看這樣的事情:

var obj = MyObjectList.FirstOrDefault(x => x.Person != null);
string userName = string.Empty;
if (null != obj) {
    userName = obj.Person.Name;
}

祝好運!

你可以先檢查你沒有null人:

string userName = (MyObjectList.Any((x => x.Person != null))) ? MyObjectList.FirstOrDefault(x => x.Person != null).Person.Name : stringEmpty;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM