У меня есть страница, которая может проходить от одного массива до 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");
}
Каждый массив является тем же самым, он будет содержать только идентификатор изображения. Это будет работать, пока все 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();
imageList
в методе ... вы делаете это в реальном коде?