我有一个页面可以传递从 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
。
不确定我错过了什么。
最佳答案
好吧,您忽略了一个事实,即如果您向它传递一个空引用,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();
关于c# - 组合空/空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25535753/