объединение пустых / нулевых массивов

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");
    }

Каждый массив является тем же самым, он будет содержать только идентификатор изображения. Это будет работать, пока все 3 массива имеют что-то в них. Но если один из них является нулевым, он ошибается.

Что мне нужно, это один массив, который представляет собой комбинацию из всех 3 -х массивов, productImages, lifestyleImages, logoImages.

Не уверен, что мне не хватает.

  • 0
    Кроме того, вы нигде не используете imageList в методе ... вы делаете это в реальном коде?
  • 0
    Да, я делаю это в реальном коде. Они добавляются в отдельную таблицу, связывающую идентификатор кампании в таблице кампании с изображениями, которые они прикрепили для кампании. @JonSkeet
Теги:
asp.net-mvc

1 ответ

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, работающую как шарм. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню