组合空/空数组

Jam*_*son 1 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");
    }
Run Code Online (Sandbox Code Playgroud)

每个数组都完全相同,只保存图像的ID.只要所有3个数组都包含其中的内容,这将有效.但如果一个为空,则会出错.

我需要的是一个单一的阵列,其是所有3个阵列的组合,productImages,lifestyleImages,logoImages.

不确定我错过了什么.

Jon*_*eet 7

好吧,你错过了Concat如果你传递一个空引用会引发异常的事实......但它很容易修复.写一个像这样的扩展方法:

public static IEnumerable<T> NullToEmpty<T>(this IEnumerable<T> src)
{
    return src ?? Enumerable.Empty<T>();
}
Run Code Online (Sandbox Code Playgroud)

称之为:

var imageList = productImages.NullToEmpty()
                             .Concat(lifestyleImages.NullToEmpty())
                             .Concat(logoImages.NullToEmpty())
                             .ToArray();
Run Code Online (Sandbox Code Playgroud)

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

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

var imageList = (productImages ?? empty).Concat(lifeStyleImages ?? empty)
                                        .Concat(logoImages ?? empty)
                                        .ToArray();
Run Code Online (Sandbox Code Playgroud)