繁体   English   中英

如何制作默认值(TSource)

[英]How to make a default(TSource)

在Linq当我调用SingleOrDefault或FirstOrDefault时,如何为特定对象返回除null之外的其他内容,例如。

        List<CrazyControls> cc = CrazyControlRepository.All();
        cc.SingleOrDefault(p => p.Id == id).Render();

如何让我的CrazyControls返回一个实现基本Render()方法的默认实例?

使用DefaultIfEmpty(defaultValue) 这将确保如果集合为空,则将使用该类型的默认实例填充该集合。

所以你可以这样做:

var defaultValue = new CrazyControl(...);

List<CrazyControls> cc = CrazyControlRepository.All();
cc.Where(p => p.Id == id).DefaultIfEmpty(defaultValue).First().Render();

查询表达式需要更改一点。 新的工作原理如下:

  1. 根据现有标准过滤集合。 这将在过滤的序列中留下一个或没有项目。
  2. 使用DefaultIfEmpty确保序列只包含一个项目(如果已经有一个项目,则DefaultIfEmpty将不执行任何操作)。
  3. 使用First获取单个项目。 我没有使用Single而不是first的原因是如果谓词不同(或者将来会发生变化)并且它接受了多个项目,那么Single会抛出。

如果没有元素,你需要定义你想要返回的“东西”:

(cc.SingleOrDefault(p => p.Id == id) ?? new CrazyControls()).Render();

换句话说,您需要定义default value

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM