使用foreach从列表中获取值

本文关键字:获取 列表 foreach 使用 | 更新日期: 2023-09-27 18:24:27

我有一个列表,其值类似于"

[0] = "{ id = ES10209005, views = 501 }"
[1] = "{ id = HYT0209005, views = 5678}"
[3] = "{ id = POI0209005, views = 4568}"

我想使用for each循环将值(id,view)传递给一个方法。

方法(id,视图)

类似于:

foreach (string v in updatereponse)
{
method()
}  

如何从列表中的每一行中隔离每个值(id、视图),然后将其传递给方法?

使用foreach从列表中获取值

列表只包含一堆字符串,任何基于此来解决问题的方法都只是一种变通方法(例如字符串解析)。你真的应该切换到强类型模型,例如定义一个类ViewCount:

public class ViewCount
{
   public string Id {get;set;}
   public int Views {get;set;}
}

然后,您可以使用List<ViewCount>填充列表:

List<ViewCount> viewcounts = new List<ViewCount>();
viewCounts.Add(new ViewCount() { Id = "ES10209005", Views = 501 });

由于每个ViewCount实例都有IdViews属性,您现在可以做正确的事情:

foreach (var item  in updatereponse)
{
    method(item.Id, item.Views);
}  

如果您将这些数据保存在一个文件中,另一种选择是使用XML而不是自定义字符串,那么您可以使用Linq-to-XML来填充List<ViewCount>,例如使用类似以下的简单XML:

<ViewCounts>
  <ViewCount id="ES10209005" views="501" />
</ViewCounts>

然后你可以加载你的列表:

XElement viewXml = XElement.Load("test.xml");
List<ViewCount> viewCounts = viewXml.Descendants("ViewCount")
                                    .Select(x => new ViewCount()
                                    {
                                        Id = (string)x.Attribute("id"),
                                        Views = (int)x.Attribute("views")
                                    }).ToList();
foreach (string v in updateresponse)
{
  var values = v.Split(",");
  var id = values[0].Replace("{ id = ", "").Trim();
  var view = values[1].Replace("views = ", "").("}","").Trim();
  method(id, value);
}

这里有另一种方法。。。您可能需要添加错误检查:

String Data = "{ id = ES10209005, views = 501 }";
String[] Segments = Data.Split(new char[] { ' ', ',' });
string ID = Segments[3];
int views = int.Parse(Segments[7]);

假设您的String的结构与您向我们展示的一样,这对您来说是可行的。

// First split id and views part.
String[] firstSplit = v.Split(',');
// Get the respected value for each part.
String id    = firstSplit[0].Split('=')[1].Trim();
String views = firstSplit[1].Split('=')[1].Trim().Replace("}","");

您可以使用String方法来检索项(例如使用Split和SubString),也可以使用正则表达式。

例如

var list = UpdateResponse[0].Split("=,} ") ;

将导致一个由所有这些字符(包括空格)分割的列表。

然后检查要使用的正确索引(使用调试器)。然后你会得到这样的东西:

var id = list[5];
var views = list[8];

(注意:检查索引5或8,它们只是猜测)。