C# 检查集合是否为空
我想将foreach封装在if语句中,该语句检查C# 检查集合是否为空,c#,asp.net-mvc,collections,C#,Asp.net Mvc,Collections,我想将foreach封装在if语句中,该语句检查 public ActionResult Create(FormCollection collection, FormCollection formValue) { try { Project project = new Project(); TryUpdateModel(project, _updateableFields); var devices = collection["
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);
}
}
是空的还是不空的。如果为空,则不应执行for each。对于记录,集合[“设备”]是来自表单的复选框值的集合。您可以使用
计数
字段检查集合是否为空
所以你会得到这样的结果:
var devices = collection["devices"];
检查数组长度如何
if(devices.Count > 0)
{
//foreach loop
}
您的代码目前无法工作,因为您说
collection[“devices”]
是复选框值的集合,但您将其转换为字符串。您的意思是collection
复选框是否有值?收藏的确切类型是什么
任何实现ICollection
或ICollection
的对象都可以通过检查Count
属性是否大于零来检查其是否为空。您不需要检查集合是否为空,如果为空,则不会执行ForEach中的代码,请参阅下面的示例
if (arr2.length > 0)
{
foreach (int i in arr2)
{
Device d = Device.Find(i);
d.Projects.Add(project);
d.SaveAndFlush();
}
}
使用系统;
使用System.Collections.Generic;
名称空间测试
{
班级计划
{
静态void Main(字符串[]参数)
{
List emptyList=新列表();
foreach(emptyList中的字符串项)
{
Console.WriteLine(“这将不会被打印”);
}
列表=新列表();
列表。添加(“第1项”);
列表。添加(“第2项”);
foreach(列表中的字符串项)
{
控制台写入线(项目);
}
Console.ReadLine();
}
}
}
您可以使用方法Any
了解集合是否为任何元素
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();
}
}
}
这对我在dotnetcore中很有效,但只适用于IEnumerable模型,而不是实体
(我从汽车制造商那里得到了一些帮助)
将其转换为列表,然后检查容量
if (devices.Any())
{
//devices is not empty
}
IEnumerable podMasters=\u podRepository.GetNewPods(零件号);
IEnumerable podList=Mapper.Map(podMasters);
if(((列表)podList).Capacity==0){
返回NotFound();
}
是的,我确实尝试过,但它给了我一个错误:错误1“string”不包含“Count”的定义,并且找不到接受“string”类型的第一个参数的扩展方法“Count”(是否缺少using指令或程序集引用?)Try Count()因为我认为FormCollection是IEnumerablethen var设备没有返回您期望的类型。如果人们不使用var
大多数人会更高兴…这是一个FormCollection。我正在将其转换为int数组,以便可以处理这些值。我更新了代码以显示整个动作的现状。只要您选择至少1个复选框,此代码就会工作,这是问题所在。formcollection仅返回包含数据的控件。这是正常的行为是的,对不起,我是个白痴。误读了我在尝试if语句时遇到的错误。这并不是因为前搜索试图在一个空集合中循环而导致的。将到int数组的转换放在if语句中可以解决这个问题。Any()是一个LINQ方法,对于这样一个简单的检查,会给您带来太多的开销。如果您的集合不可数,请选择计数或长度
IEnumerable<vwPOD_Master> podMasters = _podRepository.GetNewPods(PartNumber);
IEnumerable<NewPODsDTO> podList = Mapper.Map<IEnumerable<NewPODsDTO>>(podMasters);
if (((List<NewPODsDTO>)podList).Capacity == 0) {
return NotFound();
}