组合空/空数组

时间:2014-08-27 19:45:01

标签: 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

不确定我错过了什么。

1 个答案:

答案 0 :(得分:7)

嗯,你错过了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();

...或者直接使用null-coalescing运算符:

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

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