【问题标题】:How to compare current item with the next item in foreach asp.net如何将当前项目与foreach asp.net中的下一个项目进行比较
【发布时间】:2017-07-05 12:11:05
【问题描述】:

我有一个问题。

我有模型,感谢 foreach,我在页面中显示了这个模型。在模型中我有列(vPeriod),我需要将当前项目(例如vPeriod = 2016)与下一个项目(例如vPeriod = 2017)进行比较,我不知道如何比较!

foreach(var item in Model)
{
if(current.vPeriod == next.vPeriod)
{
//do something
}
else
{
//do something
}
}

如果我使用for,这是最简单的方法。但是我如何使用foreach 做到这一点?

代码查看:

 <tr class="line2">
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td style="color: #5f6877;">2016</td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>

@foreach (var itemData in Model)
            {
                if (itemData.vPeriod == "2016")
                {
                    <tr class="line3">
                        <td>@itemData.vAddress</td>
                        <td>@itemData.vCreateDate</td>
                        <td>@itemData.iCountOfFloors</td>
                        <td>@itemData.iCountOfRooms</td>
                        <td>@itemData.iAreaOfRooms</td>
                        <td>@itemData.vLastRepairs</td>
                        <td>@itemData.vType</td>
                        <td>@itemData.vBelonging</td>
                        <td>@itemData.vPlanRepairs</td>
                    </tr>
                }
            }

            <tr class="line2">
                <td></td>
                <td></td>
                <td></td>
                <td></td>
                <td style="color: #5f6877;">2017</td>
                <td></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>


            @foreach (var itemData in Model)
            {
                if (itemData.vPeriod == "2017")
                {
                    <tr class="line3">
                        <td>@itemData.vAddress</td>
                        <td>@itemData.vCreateDate</td>
                        <td>@itemData.iCountOfFloors</td>
                        <td>@itemData.iCountOfRooms</td>
                        <td>@itemData.iAreaOfRooms</td>
                        <td>@itemData.vLastRepairs</td>
                        <td>@itemData.vType</td>
                        <td>@itemData.vBelonging</td>
                        <td>@itemData.vPlanRepairs</td>
                    </tr>
                }
            }

真的太可怕了!我可以有很多不同的年份,并且一直需要创建一个包含数据的块和一个用于年份的“foreach 块”。

【问题讨论】:

  • 好的。但是我有问题,当我使用时。我写了for(int i = 0; i &lt; Model.Count();i++),之后我就不能用Model[i].vPeriod 调用这个项目了。
  • Ofc,因为首先,您必须将集合转换为数组。 var newArray = Model.ToArray();另外,不要忘记检查下一个值是否不在数组边界之外。
  • 在您的查看代码中,不清楚 2016 年和 2017 年的案例有什么区别?你到底想做什么?

标签: c# asp.net asp.net-mvc foreach


【解决方案1】:

您无法使用foreach 循环访问下一个元素。相反,您应该使用 for 循环并根据数组索引您可以比较这两个值。使用类似的东西

for(int i=0; i<Model.Count-1; i++)
{
   list[i] != list.Last() ? Compare(list[i], list[i+1]) : break;
}

希望这会有所帮助!

【讨论】:

  • 尽力而为,但当i 达到最后一个值时,Index out of range exception 的可能性。这个list[i+1] 将是异常的原因。
  • 能否修改为:list[i] != list.Last() ?比较(list[i], list[i+1]) : break;
  • 我认为程序员会知道 if else 的想法。顺便说一句,我更改了代码@Morgan
【解决方案2】:

解决方案:

var array = Model.ToArray();
for (int i = 0; i < array.Length - 1; i++)
{
    if(array[i].vPeriod == array[i + 1].vPeriod)
    {
        //do something
    }
    else
    {
        //do something
    }
}

使用 foreach 的解决方案,根据您的需要调整 prev 类型:

    string prev = string.Empty;
    bool first = true;
    foreach (var item in Model)
    {
        if (first)
        {
            first = false;
        }
        else if (prev == item)
        {
            //do something
        }
        else
        {
            //do something
        }

        prev = item;
    }

【讨论】:

  • for-each 解决方案似乎不错。虽然,for 解决方案不会采用最后一项! (这可能会导致问题取决于他想做什么)
  • OP 想要将每个项目与下一个项目进行比较,我们不知道应该如何处理最后一个项目。所以默认的假设是忽略它。
【解决方案3】:

试试这个:

int counter = 1;
foreach(var item in Model)
{
    if(counter == Model.Count)
       {
           break;
       }
    if(item == Model[counter])
       {
           //do something
       }
    else
       {
           //do something
       }
    counter++;
}

【讨论】:

  • 拜托,告诉我这是个玩笑。
  • 这很愚蠢,我知道。但是那个人要求和一个 foreach 在一起,我用一个 foreach 为他写了。
【解决方案4】:

谢谢大家。我做到了。我做了新的组合模型并使用了循环。我认为,这是可能的答案。

代码模型:

using System.Collections.Generic;

namespace NarkomApp.Models
{
    public class Repairs_RepairsPeriodModel
    {
        public List<REPAIRS> repairsModel { get; set; }
        public List<REPAIRS_PERIOD> repairsPeriodModel { get; set; }
    }
}

代码查看:

 @for (int i = 0; i < Model.repairsPeriodModel.Count; i++)
            {
                <tr class="line2">
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td style="color: #5f6877;">@Model.repairsPeriodModel[i].vPeriod</td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                </tr>

                for (int j = 0; j < Model.repairsModel.Count; j++)
                {
                    if (Model.repairsPeriodModel[i].iIdRepairsPeriod == Model.repairsModel[j].fk_iIdRepairsPeriod)
                    {
                        <tr class="line3">
                            <td>@Model.repairsModel[j].vAddress</td>
                            <td>@Model.repairsModel[j].vCreateDate</td>
                            <td>@Model.repairsModel[j].iCountOfFloors</td>
                            <td>@Model.repairsModel[j].iCountOfRooms</td>
                            <td>@Model.repairsModel[j].iAreaOfRooms</td>
                            <td>@Model.repairsModel[j].vLastRepairs</td>
                            <td>@Model.repairsModel[j].vType</td>
                            <td>@Model.repairsModel[j].vBelonging</td>
                            <td>@Model.repairsModel[j].vPlanRepairs</td>
                        </tr>
                    }
                }
            }

最后,我有一个很好的数据表:)

【讨论】:

    猜你喜欢
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多