在 C# 中从 2 个列表创建一个元组
Create a Tuple from 2 Lists in C#
我有以下 2 个列表:
// 我想从下面的列表中检索每个计划的文本,例如:foreach(var plan in AvailablePlanNames) and then use plan.Text property.
private IList<IWebElement> AvailablePlanNames =>
_webDriver.FindElementsWithWait(By.XPath("//div[@class='asc-checkbox-group']"));
// 从下面的列表中,我将提取 2 个属性,例如:
foreach(var planDetail in PlanDetails), fetch:
planDetail.GetAttribute("id") and planDetail.GetAttribute("checked")
private IList<IWebElement> PlansDetails => _webDriver.FindElementsWithWait(By.XPath("//div[@class='asc-checkbox-group']/input"));
所以第一个列表有:["Plan A", "Plan B", "Plan C"]
第二个列表可以是:[[Plan A ID , true], [Plan B ID, false], [Plan C ID, null]]
我正在尝试制作一个像 Tuple 这样的单一列表,其中将包含:
Tuple((Plan A, Plan A ID, true), (Plan B, Plan B ID, false), (Plan C, Plan C ID, null))
我搜索了几篇文章并尝试了多种解决方案,但没有成功。
public IList<string> GetAvailablePlans()
{
var list = new List<(string Text, string, string)>();
foreach (var planName in AvailablePlanNames)
{
foreach (var planDetail in PlansDetails)
{
list.Add((planName.Text,
planDetail.GetAttribute("id"),
planDetail.GetAttribute("checked")));
}
}
return (IList<string>)list;
}
是这样的吗?此代码假定 PlansDetails[i]
对应于指定 i
的 AvailablePlanNames[i]
。如果不是这样,您还需要为每个 AvailablePlanNames[i]
在 PlansDetails
中找到相应的数据。
该代码还使用正确的 return 值(元组列表而不是字符串列表)。
public List<(string Text, string, bool)> GetAvailablePlans()
{
var list = new List<(string Text, string, string)>();
for (var i; i<AvailablePlanNames.Length;i++)
{
list.Add((AvailablePlanNames[i].Text,
PlansDetails[i].GetAttribute("id"),
PlansDetails[i].GetAttribute("checked")));
}
return list;
}
您可以使用 LINQ 的 Zip 来组合来自两个 IEnumerable<T>
的项目,而不是循环。 :
var results=AvailablePlanNames
.Zip(PlanDetails)
.Select((first,second)=>
( Text: first.Text,
Id: second.GetAttribute("id"),
Check:second.GetAttrbute("checked")
))
.ToList();
我有以下 2 个列表:
// 我想从下面的列表中检索每个计划的文本,例如:foreach(var plan in AvailablePlanNames) and then use plan.Text property.
private IList<IWebElement> AvailablePlanNames =>
_webDriver.FindElementsWithWait(By.XPath("//div[@class='asc-checkbox-group']"));
// 从下面的列表中,我将提取 2 个属性,例如:
foreach(var planDetail in PlanDetails), fetch:
planDetail.GetAttribute("id") and planDetail.GetAttribute("checked")
private IList<IWebElement> PlansDetails => _webDriver.FindElementsWithWait(By.XPath("//div[@class='asc-checkbox-group']/input"));
所以第一个列表有:["Plan A", "Plan B", "Plan C"]
第二个列表可以是:[[Plan A ID , true], [Plan B ID, false], [Plan C ID, null]]
我正在尝试制作一个像 Tuple 这样的单一列表,其中将包含:
Tuple((Plan A, Plan A ID, true), (Plan B, Plan B ID, false), (Plan C, Plan C ID, null))
我搜索了几篇文章并尝试了多种解决方案,但没有成功。
public IList<string> GetAvailablePlans()
{
var list = new List<(string Text, string, string)>();
foreach (var planName in AvailablePlanNames)
{
foreach (var planDetail in PlansDetails)
{
list.Add((planName.Text,
planDetail.GetAttribute("id"),
planDetail.GetAttribute("checked")));
}
}
return (IList<string>)list;
}
是这样的吗?此代码假定 PlansDetails[i]
对应于指定 i
的 AvailablePlanNames[i]
。如果不是这样,您还需要为每个 AvailablePlanNames[i]
在 PlansDetails
中找到相应的数据。
该代码还使用正确的 return 值(元组列表而不是字符串列表)。
public List<(string Text, string, bool)> GetAvailablePlans()
{
var list = new List<(string Text, string, string)>();
for (var i; i<AvailablePlanNames.Length;i++)
{
list.Add((AvailablePlanNames[i].Text,
PlansDetails[i].GetAttribute("id"),
PlansDetails[i].GetAttribute("checked")));
}
return list;
}
您可以使用 LINQ 的 Zip 来组合来自两个 IEnumerable<T>
的项目,而不是循环。 :
var results=AvailablePlanNames
.Zip(PlanDetails)
.Select((first,second)=>
( Text: first.Text,
Id: second.GetAttribute("id"),
Check:second.GetAttrbute("checked")
))
.ToList();