c# - 如何一次迭代3个数组

标签 c# asp.net foreach

我有 3 个包含不同信息的数组。 1 个数组包含一堆 id,第二个数组包含一堆日期,第三个数组包含一堆名称。

我知道这是一个简单的问题,但我不记得如何做,所以我为我的愚蠢道歉。

3 个数组如下所示:

string[] eventIDs = EventID.Split(',');
        string[] eventDates = eventCopyDate.Split(',');
        string[] invNames = investigatorNames.Split(',');

这些值看起来像“john Doe、Mark Doe、Tim Doe”,因此为什么要使用 .Split 我在这里尝试了嵌套的 for 循环,但没有成功。

foreach (var id in eventIDs)
        {
            foreach (var date in eventDates)
            {
                foreach (var name in invNames)
                {
                    cmd.Parameters.Add(new SqlParameter("@EventID", SqlDbType.Int));
                    cmd.Parameters["@EventID"].Value = int.Parse(id);

                    cmd.Parameters.Add(new SqlParameter("@InvestigatorName", SqlDbType.NVarChar));
                    cmd.Parameters["@InvestigatorName"].Value = name;

                    cmd.Parameters.Add(new SqlParameter("@CopyDate", SqlDbType.DateTime));
                    cmd.Parameters["@CopyDate"].Value = Convert.ToDateTime(date);

                }//end name foreach

            }//end date foreach
        }//end id foreach

我知道这只会在返回第二个嵌套数组之前先遍历整个数组。我试图迭代到数组中的第一个值,将它们分配给变量,然后进行第二次迭代。

因此 arrayNames:"john Doe, Mark Doe"arrayDates"12/12/12, 10/12/12"和 arrayID:"234,235,236"的用法如下:

"john Doe" "12/12/12" "234"
"Mark Doe" "10/12/12" "235"

最佳答案

使用具有唯一索引的 for 循环,假设 3 个三个数组具有相同的大小。

string[] eventIDs = EventID.Split(',');
string[] eventDates = eventCopyDate.Split(',');
string[] invNames = investigatorNames.Split(',');

for(int i=0; i<eventIDs.Length;i++) {
    var id = eventIDs[i];
    var date = eventDates[i];
    var name = invNames[i];
    cmd.Parameters.Add(new SqlParameter("@EventID", SqlDbType.Int));
    cmd.Parameters["@EventID"].Value = int.Parse(id);

    cmd.Parameters.Add(new SqlParameter("@InvestigatorName", SqlDbType.NVarChar));
    cmd.Parameters["@InvestigatorName"].Value = name;

    cmd.Parameters.Add(new SqlParameter("@CopyDate", SqlDbType.DateTime));
    cmd.Parameters["@CopyDate"].Value = Convert.ToDateTime(date);
}

如果你真的想要一个 foreach,你可以这样写,但在我看来它的可读性较差:

var assembled = Enumerable.Range(0, eventIDs.Length).Select(i=> new { id=eventIDs[i], name=invName[i], date=eventDates[i] } );

foreach(var value in assembled){

    cmd.Parameters.Add(new SqlParameter("@EventID", SqlDbType.Int));
    cmd.Parameters["@EventID"].Value = int.Parse(value.id);

    cmd.Parameters.Add(new SqlParameter("@InvestigatorName", SqlDbType.NVarChar));
    cmd.Parameters["@InvestigatorName"].Value = value.name;

    cmd.Parameters.Add(new SqlParameter("@CopyDate", SqlDbType.DateTime));
    cmd.Parameters["@CopyDate"].Value = Convert.ToDateTime(value.date);

}

但我更喜欢第一种解决方案。

关于c# - 如何一次迭代3个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12820230/

相关文章:

c# - 正则表达式匹配不一致

c# - 序列化和反序列化 (C#)

c# - CA1019 : Define accessor for attribute argument. 不明白是什么原因

c# - 如何使 Global.asax 引用 aspx 中声明的下拉列表?

asp.net - 将 Azure 管道与 Gitlab 集成(持续集成)

c# - 像 ForEach 一样使用 List<T>.RemoveAll 有什么缺点?

c# - c# 中是否已有条件 Zip 函数?

javascript - ASP.NET(Web 表单)下拉菜单在 JavaScript 函数上显示和隐藏

php - ForEach 随机数组

java - 检查 Span 的可为空状态