возвращая NULL из метода IEnumerable, если результаты не были найдены - PullRequest
3 голосов
/ 07 октября 2019

Я использую Automapper и классы с сериализацией Xml для генерации XML-файла.

В этом методе он возвращает IEnumerable Automapper, который затем записывает серию <GenerationMethod>...</GenerationMethod> XML-элементов.

Это работает, однако, если он возвращает пустой IEnumerable, поскольку результаты не были найдены, я получаю пустые теги XML, например:

<GenerationMethod />

Есть ли способ вернуть NULL, чтобыпустые теги XML не генерируются?

Вот метод. Спасибо!

public static IEnumerable<GenerationMethod> GetGenerationMethod(this DungeonGrid monster)
{

    var customMonster = monster.Stats
            .Where(e => e.Stat.Category.IsActive);

    if (monster.MonsterType.DestructionMethod.StartsWith("TEST"))
    {
        yield return new GenerationMethod(monster.MonsterType.DestructionMethod);
    }

    foreach (Stat in customMonster)
    {
        if (DungeonLookupByStatId.ContainsKey(customMonster.MonsterType.Id))
            yield return DungeonLookupByStatId[customMonster.MonsterType.Id];
    }
}

1 Ответ

1 голос
/ 07 октября 2019

Ваша конечная цель - не включать тег GenerationMethod в XML в случае, если IEnumerable пуст.

Поэтому я предлагаю вам точно обработать это, а не изменять метод, возвращающий IEnumerable.
IEnumerable как кошка Шредингера. У него есть все предметы и вообще нет предметов, и только когда вы фактически перечислите, вы будете точно знать, какие предметы он даст.
Таким образом, возвращая нуль вместо IEnumerable, вы не сможете понять цель IEnumerable.

Итак, чтобы ответить на ваш вопрос, создайте свой собственный сериализатор xml ( Вот ответ на SO о том, как вы можете достичь этого , или просто посмотрите его. Это должно быть довольно прямовперед). Все, что вам нужно сделать, это изменить способ записи IEnumerable в XML.
Логика должна быть довольно простой:

  1. Вызвать метод расширения .ToList() на вашем IEnumerable для его перечисления.
  2. Если в списке есть элементы, создайте тег и добавьте теги обычным способом.
  3. Ничего не делайте, если список пуст.

Надеюсь, это даст вам направление, которое вы ищете.

...