两个字符串列表和foreach
本文关键字:列表 foreach 字符串 两个 | 更新日期: 2023-09-27 17:53:20
我的WebAPI接收两个字符串,一个包含显示值(名称),一个包含隐藏值(电子邮件)。
之前,它只接收一个字符串,它使用foreach,我不确定如何让它与两个工作,如何从"nameslist":
[System.Web.Http.HttpGet]
public AjaxAnswer BatchUserCreate(string email, string names) {
string[] emaillist = email.Split(''n');
string[] nameslist = names.Split(''n');
foreach(string email in emaillist) {
db.AddParameter("@email",email);
db.AddParameter("@name",name);
int newId = db.ExecuteScalar(userInsQuery);
}
return new AjaxAnswer(newId);
}
将两个列表压缩在一起
var nameEmailPairs = emaillist.Zip(namelist, (email,name)=>new{email,name});
你可以在的上foreach
,这将有一个名称和电子邮件项。
如果您保证这些列表的顺序相同,请使用plain for循环:
for(int i=0; i<emaillist.Length; i++) {
string email = emaillist[i];
string name = namelist[i];
...
或者您可以使用LINQ与Zip
:
var records = emaillist.Zip(namelist, (email, name) => new {email, name});
foreach(var r in records) {
string email = r.email;
string name = r.name;
...
您应该使用for
循环代替,像这样的东西可以帮助:
[System.Web.Http.HttpGet]
public AjaxAnswer BatchUserCreate(string email, string names) {
string[] emaillist = email.Split(''n');
string[] nameslist = names.Split(''n');
for(int i = 0; i!=emaillist.Length; ++i) {
db.AddParameter("@email", emaillist[i]);
db.AddParameter("@name", nameslist.Length > i ? nameslist[i] : "No name");
int newId = db.ExecuteScalar(userInsQuery);
}
return new AjaxAnswer(newId);
}
如果两个数组(email &如果Nameslist)相等,则应该使用for循环而不是foreach循环:
[System.Web.Http.HttpGet]
public AjaxAnswer BatchUserCreate(string email, string names) {
string[] emaillist = email.Split(''n');
string[] nameslist = names.Split(''n');
for(int i = 0; i < emaillist.Length; i++) {
db.AddParameter("@email",emaillist[i]);
db.AddParameter("@name",namelist[i]);
int newId = db.ExecuteScalar(userInsQuery);
}
return new AjaxAnswer(newId);
}
尝试一下,希望能有所帮助
for(int i =0 ; i< emaillist .count; i++)
{
db.AddParameter("@email",emaillist[i]);
db.AddParameter("@name",nameslist[i]);
int newId = db.ExecuteScalar(userInsQuery);
}
尝试将foreach loop改为for loop:
[System.Web.Http.HttpGet]
public AjaxAnswer BatchUserCreate(string email, string names) {
string[] emaillist = email.Split(''n');
string[] nameslist = names.Split(''n');
// You should declare "newId" somewhere here
// if you want to return it via "new AjaxAnswer(newId)"
int newId = 0;
// if emaillist and nameslist have diffrent lengths
// let's take minimal length
int n = Math.Min(nameslist.Length, emaillist.Length);
for (int i = 0; i < n; ++i) {
db.AddParameter("@email", emaillist[i]);
db.AddParameter("@name", nameslist[i]);
newId = db.ExecuteScalar(userInsQuery);
}
return new AjaxAnswer(newId);
}