C#中的foreach循环怎么用?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中的foreach循环怎么用?相关的知识,希望对你有一定的参考价值。
foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组。foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。
能够应用的编程语言类别:Java、C# 、PHP、D语言(Phobos库)。
foreach语句是c#中新增的循环语句,他对于处理数组及集合等数据类型特别方便。
foreach语句的一般语法格式如下:
foreach(数据类型 标识符 in 表达式)
循环体
。
此语句的形式如下:
foreach (type identifier in expression) statement
其中:
type
identifier 的类型。
identifier
表示集合元素的迭代变量。如果迭代变量为值类型,则无法修改的只读变量也是有效的。
expression
对象集合或数组表达式。集合元素的类型必须可以转换为 identifier 类型。请不要使用计算为 null 的表达式。
而应计算为实现 IEnumerable 的类型或声明 GetEnumerator 方法的类型。在后一种情况中,GetEnumerator 应该要么返回实现 IEnumerator 的类型,要么声明 IEnumerator 中定义的所有方法。
statement
要执行的嵌入语句。
事例:
int[]arr=newint[]0,1,2,3,4;
foreach(int i in arr)
Console.Write(i);
C#中:foreach 针对引用类型地址的访问
如果当前方法中在访问当前引用类型的集合,在新调用的 方法中在修改当前集合的地址时,当前地址会依然存在,不符合C#中的对象的生命周期,一旦当前文件的引用地址被替换掉了,当前对象的空间就消失废弃了,但是,foreach()
会保留原先的集合的地址<地址应该也是有生命周期的>foreach 和for 就不一样!
c#中:foreach举例
using System;
class Number
static void Main()
int evenNum = 0, oddNum = 0;
//定义并初始化一个一维数组
int[] arr = new int[] 13, 16, 15, 78, 26, 65, 39 ;
foreach (intk in arr) //提取数组中的整数
if (k % 2 == 0) //判断是否为偶数
evenNum++;
else
oddNum++;
Console.WriteLine("偶数个数:0 奇数个数:1", evenNum, oddNum);
Console.ReadKey();
参考技术A foreach 有个固定的语言,其他它并不是走循环,而是遍历foreach(类型 类型变量 in 数组)
参考技术B int[] list = 1,2,3,4,5,6,7'
foreach (int i in list
Response.Write(i);
本回答被提问者采纳 参考技术C foreach(dr in dt) 参考技术D foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组。foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。
能够应用的编程语言类别:Java、C# 、PHP、D语言(Phobos库)。
foreach语句是c#中新增的循环语句,他对于处理数组及集合等数据类型特别方便。
foreach语句的一般语法格式如下:
foreach(数据类型 标识符 in 表达式)
循环体
。
此语句的形式如下:
foreach (type identifier in expression) statement
其中:
type
identifier 的类型。
identifier
表示集合元素的迭代变量。如果迭代变量为值类型,则无法修改的只读变量也是有效的。
expression
对象集合或数组表达式。集合元素的类型必须可以转换为 identifier 类型。请不要使用计算为 null 的表达式。
而应计算为实现 IEnumerable 的类型或声明 GetEnumerator 方法的类型。在后一种情况中,GetEnumerator 应该要么返回实现 IEnumerator 的类型,要么声明 IEnumerator 中定义的所有方法。
statement
要执行的嵌入语句。
事例:
int[]arr=newint[]0,1,2,3,4;
foreach(int i in arr)
Console.Write(i);
C#中:foreach 针对引用类型地址的访问
如果当前方法中在访问当前引用类型的集合,在新调用的 方法中在修改当前集合的地址时,当前地址会依然存在,不符合C#中的对象的生命周期,一旦当前文件的引用地址被替换掉了,当前对象的空间就消失废弃了,但是,foreach()
会保留原先的集合的地址<地址应该也是有生命周期的>foreach 和for 就不一样!
c#中:foreach举例
using System;
class Number
static void Main()
int evenNum = 0, oddNum = 0;
//定义并初始化一个一维数组
int[] arr = new int[] 13, 16, 15, 78, 26, 65, 39 ;
foreach (intk in arr) //提取数组中的整数
if (k % 2 == 0) //判断是否为偶数
evenNum++;
else
oddNum++;
Console.WriteLine("偶数个数:0 奇数个数:1", evenNum, oddNum);
Console.ReadKey();
带有模型和视图包的视图中的 C# MVC foreach 循环
【中文标题】带有模型和视图包的视图中的 C# MVC foreach 循环【英文标题】:C# MVC foreach loop in view with model and viewbag 【发布时间】:2017-08-08 19:23:46 【问题描述】:控制器:
public ActionResult SelectPlaats()
var one = repository.GetAllReserveringen.Where(x => x.StartDatum >= x.StartDatum
&& x.StartDatum <= x.EindDatum).Select(p => p.Plaats);
var two = repository.GetAllPlekken.Select(p => p.Plaatsnummer);
ViewBag.vrijeplekken = two.Except(one).ToList();
return View(repository.GetAllPlekken);
查看:
@using Camping.Domain.Entities
@model IEnumerable<Plek>
@
ViewBag.Title = "Beschikbare campingplekken";
Layout = "~/Views/Shared/_Layout.cshtml";
<div class="panel panel-default">
<div class="panel-heading">
<h3>Overzicht van alle klanten</h3>
</div>
<div class="panel-body">
<table class="table table-striped table-condensed table-bordered">
<tr>
<th>Plaatsnummer</th>
<th>Veldnaam</th>
<th>Type</th>
<th>Vierkante meter</th>
<th>Amp</th>
<th>Wifi</th>
<th>Water</th>
<th>Riool</th>
<th>CAI</th>
<th>PPN</th>
<th>Seizoenplek</th>
<th class="text-center">Reserveren</th>
</tr>
@foreach (var item in Model.Where(x => x.Plaatsnummer == ViewBag.vrijeplekken))
<tr>
<td>@item.Plaatsnummer</td>
<td>@item.Veldnaam</td>
<td>@item.Type</td>
<td>@item.Vierkantemeter</td>
<td>@item.Amp</td>
<td>@item.Wifi</td>
<td>@item.Water</td>
<td>@item.Riool</td>
<td>@item.CAI</td>
<td>@item.PPN</td>
<td>@item.Seizoenplek</td>
<td class="text-center">
@using (Html.BeginForm("SelectPlek", "Reservering"))
@Html.Hidden("Id", item.Plaatsnummer)
<input type="submit"
class="btn btn-default btn-xs"
value="Reserveren" />
</td>
</tr>
</table>
</div>
</div>
所以我们有了模型,其中包含我的露营应用程序所具有的所有露营边 + 详细信息。但我只想在此视图中显示免费露营地。
我从我的数据库中提取了所有免费的露营,并将它们放入我的 Viewbag.vrijeplekken 中,其中包含一个边号列表 (Plaatsnummer)。
我不知道如何获得一张只有免费露营地编号但包含所有露营地都有详细信息的桌子。
我希望任何人都可以帮助我。提前致谢!
【问题讨论】:
为什么要使用 viewbag 而不仅仅是将其添加为模型的一部分并在循环中使用它? 【参考方案1】:您的视图应该只关心呈现它在(视图)模型中接收到的数据。 由控制器选择要显示的数据。
正如德里克所说:
public Actionresult SelectPlaats()
var one = repository.GetAllReserveringen.Where(x => x.StartDatum >= x.StartDatum && x.StartDatum <= x.EindDatum).Select(p => p.Plaats).ToList();
return View(repository.GetAllPlekken.Where(p => !one.Contains(p.plaatsnummer)).ToList());
或
public Actionresult SelectPlaats()
var one = repository.GetAllReserveringen.Where(x => x.StartDatum >= x.StartDatum && x.StartDatum <= x.EindDatum);
return View(repository.GetAllPlekken.Except(one).ToList());
在你看来:
@foreach (var item in Model)
....
【讨论】:
我只是不太懂代码。免费露营地与一般露营地列表有何联系? 在一个中,您可以获得所有被占用的位置的列表。那么您传递给视图的模型包含所有点的列表,除了“one”中的点(被占用的点)。 啊,我现在明白了。我错过了“!一个”。谢谢你:)以上是关于C#中的foreach循环怎么用?的主要内容,如果未能解决你的问题,请参考以下文章