Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查集合是否为空_C#_Asp.net Mvc_Collections - Fatal编程技术网

C# 检查集合是否为空

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["

我想将foreach封装在if语句中,该语句检查

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