我有一个页面可以从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.
不确定我错过了什么.
好吧,你错过了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)