c# - 组合空/空数组

标签 c# asp.net-mvc

我有一个页面可以传递从 1 个数组到 3 个数组的任何地方。

我当前的代码有效,但前提是每个数组都填充了项目。

    [HttpPost, ValidateInput(false)]
    public ActionResult AddCampaign(string campaignName, string editor1, Int32[]
 productImages, Int32[] lifestyleImages, Int32[] logoImages)
    {

        // Add image list to CampaignImages table
        // Combine image array list into a single array
        var imageList = productImages.Concat(lifestyleImages).Concat(logoImages).ToArray();

        return RedirectToAction("AddCampaign", "Admin");
    }

每个数组都完全相同,它只包含图像的 ID。只要所有 3 个数组中都有内容,这就会起作用。但是,如果一个为空,则会出错。

我需要的是一个由所有 3 个数组组合而成的数组,productImageslifestyleImageslogoImages

不确定我错过了什么。

最佳答案

好吧,您忽略了一个事实,即如果您向它传递一个空引用,Concat 将抛出一个异常……但它很容易修复。要么写一个这样的扩展方法:

public static IEnumerable<T> NullToEmpty<T>(this IEnumerable<T> src)
{
    return src ?? Enumerable.Empty<T>();
}

并将其命名为:

var imageList = productImages.NullToEmpty()
                             .Concat(lifestyleImages.NullToEmpty())
                             .Concat(logoImages.NullToEmpty())
                             .ToArray();

...或者直接使用空合并运算符:

var empty = Enumerable.Empty<int>();

var imageList = (productImages ?? empty).Concat(lifeStyleImages ?? empty)
                                        .Concat(logoImages ?? empty)
                                        .ToArray();

关于c# - 组合空/空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25535753/

相关文章:

c# - 在 C# 中解决此问题的最佳线程方法是什么?

javascript - 您好,我正在使用 ASP.NET 和 Javascript 计时器,如何防止在页面刷新时重置计时器

c# - Visual Studio 安装程序项目 - 未设置快捷方式图标

asp.net-mvc - MSFT报表查看器(rdlc)是否可以与MVC一起使用

c# - 使用 Description 属性装饰 EF 对象模型上的枚举?

c# - ASP.NET MVC 动态设计

c# - 如何更改 ASP.Net MVC 5 中的默认 "[field value] already taken"错误消息?

c# - IServiceCollection 不包含 AddMvc() 的定义

asp.net-mvc - MVC 6/vNext 中的 HttpResponse.Filter?

javascript - 在.NET MVC JQuery Ajax中调用下载数据为.csv