两个字符串列表和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);
}

两个字符串列表和foreach

将两个列表压缩在一起

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);
}