检查集合是否为空

时间:2010-10-12 11:52:47

标签: c# asp.net-mvc collections

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”]是表单中复选框值的集合。

6 个答案:

答案 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(); 
}