public ActionResult Create(FormCollection collection, FormCollection formValue)
{
try
{
Project project = new Project();
TryUpdateModel(project, _updateableFields);
var devices = collection["devices"];
string[] arr1 = ((string)devices).Split(',');
int[] arr2 = Array.ConvertAll(arr1, s => int.Parse(s));
project.User = SessionVariables.AuthenticatedUser;
var time = formValue["Date"];
project.Date = time;
project.SaveAndFlush();
foreach (int i in arr2)
{
Device d = Device.Find(i);
d.Projects.Add(project);
d.SaveAndFlush();
}
return RedirectToAction("Index");
}
catch (Exception e)
{
return View(e);
}
}
我想将foreach包装在if语句中,该语句检查是否
var devices = collection["devices"];
是否为空。如果它为空,则不应执行每个。对于记录,集合[“devices”]是表单中复选框值的集合。
答案 0 :(得分:14)
您可以使用Count
字段检查集合是否为空
所以你最终会得到这样的东西:
if(devices.Count > 0)
{
//foreach loop
}
答案 1 :(得分:8)
您可以使用方法Any
来了解集合是否为任何元素。
if (devices.Any())
{
//devices is not empty
}
答案 2 :(得分:7)
您不需要检查集合是否为空,如果它是空的,ForEach中的代码将不会被执行,请参阅下面的示例。
using System;
using System.Collections.Generic;
namespace Test
{
class Program
{
static void Main(string[] args)
{
List<string> emptyList = new List<string>();
foreach (string item in emptyList)
{
Console.WriteLine("This will not be printed");
}
List<string> list = new List<string>();
list.Add("item 1");
list.Add("item 2");
foreach (string item in list)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
}
}
答案 3 :(得分:1)
您的代码不会起作用,因为您说collection["devices"]
是复选框值的集合,但您将其转换为string
。您的意思是collection
是复选框值吗? collection
的确切类型是什么?
通过检查ICollection
属性是否大于零,可以检查实现ICollection<T>
或Count
的任何对象是否为空。
答案 4 :(得分:0)
如何检查数组长度
if (arr2.length > 0)
{
foreach (int i in arr2)
{
Device d = Device.Find(i);
d.Projects.Add(project);
d.SaveAndFlush();
}
}
答案 5 :(得分:0)
这在Dot Net Core中适用于我,但仅适用于IEnumerable of Models not Entities (我从AutoMapper得到了一些帮助)
将其投射为列表,然后检查容量
IEnumerable<vwPOD_Master> podMasters = _podRepository.GetNewPods(PartNumber);
IEnumerable<NewPODsDTO> podList = Mapper.Map<IEnumerable<NewPODsDTO>>(podMasters);
if (((List<NewPODsDTO>)podList).Capacity == 0) {
return NotFound();
}