2009-08-05 89 views
1

我想將兩個屬性分配行分成一行,因爲我打算將它們構建到一個應用程序中,它們將會很多。我該如何使用?將這兩條線合併爲一個?

有沒有一種方法來表達這兩行優雅地構造C#,也許與一個?這樣的運營商?

string nnn = xml.Element("lastName").Attribute("display").Value ?? ""; 

下面的代碼:

using System; 
using System.Xml.Linq; 

namespace TestNoAttribute 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      XElement xml = new XElement(
       new XElement("employee", 
        new XAttribute("id", "23"), 
        new XElement("firstName", new XAttribute("display", "true"), "Jim"), 
        new XElement("lastName", "Smith"))); 

      //is there any way to use ?? to combine this to one line? 
      XAttribute attribute = xml.Element("lastName").Attribute("display"); 
      string lastNameDisplay = attribute == null ? "NONE" : attribute.Value; 

      Console.WriteLine(xml); 
      Console.WriteLine(lastNameDisplay); 

      Console.ReadLine(); 

     } 
    } 
} 

回答

4

當然可以!

只是這樣做:

string lastNameDisplay = (string)xml.Element("lastName").Attribute("display") ?? "NONE"; 
+0

是的,這就是我一直在尋找的東西,並且仍然非常可讀,我認爲只要你知道什麼是?確實,謝謝! – 2009-08-05 15:59:52

+1

??在顯式強制優先之前? – Will 2009-08-05 16:00:13

+0

我正在開會,或者我早些時候會回覆。 'XAttribute'將轉換爲空字符串,然後合併並替換爲「NONE」。 – 2009-08-05 17:08:21

3

爲什麼不使用一個小的輔助函數,它接受一個的XElement並返回lastNameDisplay字符串?

+0

可讀的代碼比緊湊的代碼更有價值。 +1是唯一不犧牲的答案。 – ojrac 2009-08-05 16:02:15

8

當然,但是這太可怕了,不優雅:

string lastNameDisplay = xml.Element("lastName").Attribute("display") == null ? "NONE" : xml.Element("lastName").Attribute("display").Value; 

如果你願意,你可以寫一個擴展方法:

public static string GetValue(this XAttribute attribute) 
{ 
    if (attribute == null) 
    { 
     return null; 
    } 

    return attribute.Value; 
} 

用法:

var value = attribute.GetValue(); 
+0

擴展方法是完成此操作的唯一方法。 – Will 2009-08-05 15:58:25

1

不究竟。你正在尋找的是一個無人看守(我認爲這就是所謂的),而c#沒有。如果前面的對象不爲null,它只會調用保護屬性。

3

你可以這樣做:

string lastNameDisplay = (xml.Element("lastName").Attribute("display") ?? new XAttribute("display", "NONE")).Value; 
+0

這是針對「null」這個'引用擴展方法應該拋出NRE「的人羣。 – Will 2009-08-05 15:59:07

+0

這個*確實*回答了這個問題,但我不確定當我不需要時我想創建額外的對象。 – 2009-08-05 16:01:27

0

不太。你會得到最接近的是一個擴展方法如下所示:

public static string ValueOrDefault(this XAttribute attribute, string Default) 
{ 
    if(attribute == null) 
     return Default; 
    else 
     return attribute.Value; 
} 

然後你就可以縮短兩行:

string lastNameDisplay = xml.Element("lastName").Attribute("display").ValueOrDefault("NONE"); 
相關問題