2014-10-28 130 views
0

我在一類這個位代碼:檢查foreach循環名單導致C#

public class TicketSummary 
    { 

     //get all the development tickets 
     public List<IncidentSummary> AllDevelopmentTickets { get; set; } 
     public List<string> TicketNames() 
     { 
      List<string> v = new List<string>(); 

      foreach (var developmentTicket in AllDevelopmentTickets) 
      { 
       var ticketIds = developmentTicket.id.ToString(CultureInfo.InvariantCulture); 
       v.Add(ticketIds); 
      } 

      return v; 
     } 
    } 
} 

而且我想看看我的API接口(加上所有的代碼),做它的工作,並拉回到門票和他們的信息,更具體地說是ID。

在我的主程序中,我不知道如何檢查它是否完成了這項工作。我試過的東西,但它是不完全正確,不返回任何東西(我知道我需要一個Console.WriteLine)

 static void Main(string[] args) 
     { 

      Console.ReadLine(); 


      var tickets = new TicketSummary(); 
      tickets.TicketNames(); 
      while (tickets != null) 
      { 
       Console.WriteLine(tickets); 
      } 

     } 

任何建議,好嗎?

謝謝!

+1

只是一個建議:因爲它是在C#中的關鍵字沒有使用'var'作爲變量名。這很混亂。 – MSX 2014-10-28 09:00:00

+0

它返回,但你忽略了返回值 – 2014-10-28 09:00:35

+0

'tickets.TicketNames();'看起來應該返回一些東西? 'while(票!= null)'是一個永遠不會結束的循環 - 你不會在循環中改變它。 – 2014-10-28 09:00:50

回答

0

您需要指定/使用TicketNames()方法的返回值。這似乎很多工作只是爲了返回字符串版本的TicketId。這可以減少

public List<string> TicketNames() 
{ 
    return AllDevelopmentTickets 
     .Select(t => t.id.ToString(CultureInfo.InvariantCulture)) 
     .ToList(); 
} 

    var ticketSummary = new TicketSummary(); 
    var ticketNames = ticketSummary.TicketNames(); 

    foreach(var ticketName in ticketNames) 
    { 
     Console.WriteLine(ticketName); 
    } 

甚至只是:

foreach(var ticketName in AllDevelopmentTickets 
     .Select(t => t.id.ToString(CultureInfo.InvariantCulture))) 
    { 
     Console.WriteLine(ticketName); 
    } 
1

你已經放棄了返回的結果:tickets.TicketNames();回報List<String>必須分配然後itterate

var tickets = new TicketSummary(); 
var names = tickets.TicketNames(); // <- names, List<String> according to the code 

// printing out all the names 
foreach(var name in names) 
    Console.WriteLine(name); 
1

你的意思是你只想打印所有的票了呢?

foreach (var ticket in tickets.TicketNames()) 
{ 
    Console.WriteLine(ticket); 
} 
0

您忽略了返回的值。

static void Main(string[] args) 
    { 

     Console.ReadLine(); 


     var tickets = new TicketSummary(); 
     var res = tickets.TicketNames(); 
     while (for r in res) 
     { 
      Console.WriteLine(r); 
     } 

    } 
1

你在你的代碼的幾個問題,應該保持它甚至編譯,但除此之外,它似乎就是你真正之後是轉換中的數據AllDevelopmentTickets,而不是移動它在某處。所以你可以用Select調用(來自LINQ)來完成。所以,在你的主要方法:

var tickets = new TicketSummary(); 
// add some tickets to tickets.AllDevelopmentTickets here... 

var ticketNames = tickets.AllDevelopmentTickets.Select(ticket => ticket.id.ToString(); 
// Yes, you should probably use an UI culture in the ToString call. 
// I'm just trying to limit my line width =) 

現在,ticketNames應該是一個IEnumerable<string>拿着所有的票IDS。 ,例如,打印出來,你可以遍歷它們,並寫入到控制檯輸出:

foreach (var name in ticketNames) { 
    Console.WriteLine(name); 
}