2014-10-28 129 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); 
}