2017-09-22 54 views
0

我創建了事件代碼開關..case,我不知道如何將事件代碼翻譯成的XElement的事件狀態需要幫助Switch..Case的值轉換爲輸出到XML

這裏是EVENTCODE類

public class EventCode 
    { 
     public enum EvCodes {Delivered, DispatchedForDelivery, 
     DepartedFromTerminal, ArrivedAtDestinationTerminal}; 
     public static void Main() 
     { 
      string val = "Dispatched For Delivery"; 
      switch ((EvCodes)Enum.Parse(typeof(EvCodes), val.Replace(" ", ""))) 
      { 
       case EvCodes.DispatchedForDelivery: 
       case EvCodes.Delivered: 
        Console.WriteLine("OD"); 
        break; 
       case EvCodes.DepartedFromTerminal: 
        Console.WriteLine("L1"); 
        break; 

      } 

     } 

這裏是EventStatus是什麼,我想轉換或讀取值:

rspxml.Root.Add(
new XElement("API", "4.0"), 
new XElement("PackageTrackingInfo", 
new XElement("TrackingNumber", prc.ProNumber) 
), 

new XElement("TrackingEventHistory", 
prc.History.Cast<Saia.Data.General.Shipment.HistoryItem>().Select(item => 
new XElement("TrackingEventDetail", 
new XElement("EventStatus", prc.History, 
new XElement("EventReason", prc.History), 
new XElement("EventDateTime", prc.History) 

難道是這樣的:

new XElement("EventStatus", EventCode.EvCodes.Delivered 

回答

0

您可以創建一個接受一個EvCodes值作爲輸入,並返回要添加到的XElement字符串的擴展方法,像:

public static string ToXml(this EventCode.EvCodes value) 
{ 
    switch(value) 
    { 
    case EvCodes.DispatchedForDelivery: 
    case EvCodes.Delivered: 
     return "OD"; 
    case EvCodes.DepartedFromTerminal: 
     return "L1"; 
    } 
} 

當你希望寫這到XML你然後將調用擴展方法爲:

new XElement("EventStatus", EventCode.EvCodes.Delivered.ToXml()); 
+0

獲取有關這幾個錯誤:\t 1.'Extension方法必須在頂級靜態類中定義; EvMapper是一個嵌套類\t 2.'名稱'EvCodes'在當前上下文中不存在 – user2091766

+0

好吧,編譯器沒有錯 擴展方法是一個建議,如果你想使用它,那麼它需要以進入單獨的靜態類,如果不是的話,您可以從value參數中刪除'this'關鍵字,並將ToXml方法放在同一個類中,您可以從 中調用它。我不知道EvMapper是什麼 - 它不是在你的示例代碼中 – lowds