2014-08-27 56 views
1

我有一个页面,可以通过任何地方从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个阵列的组合,即productImages,lifestyleImageslogoImages

不知道我缺少什么。

+0

顺便说一句,你不是*在方法中的任何地方使用*'imageList' ...你是否在真实代码中这样做? – 2014-08-27 19:49:10

+0

是的,我在真正的代码中做到这一点。这些内容将添加到将广告系列表广告系列ID与广告系列所附图片链接在一起的单独表格中。 @JonSkeet – 2014-08-27 19:53:58

回答

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

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

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

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

我使用了一个像魅力一样工作的null-coalescing选项。谢谢! – 2014-08-27 19:54:35