c# - 如果未找到结果,则从 IEnumerable 方法返回 NULL
问题描述
我正在使用 Automapper 和带有 Xml 序列化的类来生成 XML 文件。
在此方法中,它向 Automapper 返回一个 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];
}
}
解决方案
您的最终目标是GenerationMethod
在 IEnumerable 为空的情况下不将标记包含在 XML 中。
所以我建议你完全处理这个问题,而不是改变返回IEnumerable
.
IEnumerable
就像薛定谔的猫。它有所有项目,根本没有项目,只有当你实际枚举时,你才会确切知道它将产生什么项目。
因此,返回 null 而IEnumerable
不是IEnumerable
.
因此,要回答您的问题,请创建您自己的 xml 序列化程序(这是关于如何实现该目标的答案,或者只是查找它。它应该非常简单)。您需要做的就是更改IEnumerable
写入 XML 的方式。
逻辑应该很简单:
- 调用
.ToList()
你的扩展方法IEnumerable
来枚举它。 - 如果列表有项目,请创建标签并以常规方式添加标签。
- 如果列表为空,则不执行任何操作。
我希望它能给你你正在寻找的方向。
推荐阅读
- druid - 德鲁伊的选择查询中的“粒度”有什么影响?
- mysql - 使用两个值组合更新值
- asynchronous - 没有 Verticle 实现和事件循环的类
- odata - 您应该在 Dynamics CRM 中指定父联系人或帐户错误
- php - Microsoft graph 无法读取 JSON 请求负载
- c++ - 有没有办法在不使用命名空间 std 或前缀 std:: 的情况下引用 cout?
- vhdl - 如果 VHDL 调用无限递归函数会发生什么?
- r - 在 Rmarkdown Shiny 应用程序中使用服务器端 updateSelectizeInput
- javascript - 从嵌套对象分配变量
- mongodb - 如何在 MongoDB Compass 社区中使用 MongoDB Aggregations 删除重复项