使用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、视图),然后将其传递给方法?
列表只包含一堆字符串,任何基于此来解决问题的方法都只是一种变通方法(例如字符串解析)。你真的应该切换到强类型模型,例如定义一个类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实例都有Id
和Views
属性,您现在可以做正确的事情:
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,它们只是猜测)。