我有一个页面可以从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
,lifestyleImages
,logoImages
。
不确定我错过了什么。
答案 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();