• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > 基于不要返回null之EmptyFactory的应用详解

基于不要返回null之EmptyFactory的应用详解

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了sessionfactory null,null和empty的区别,is null or empty,null string.empty,empty null等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
有很多书上都提出过一个建议:不要返回null对象。
比如下面的GetUsers方法:
public class User
{
    public string Id { get; set; }
    public string Name { get; set; }
}

public List<User> GetUsers()
{
    List<User> result = new List<User>();

    // search db for user
    return result;
}
如果其他方法由GetUsersOfxxx,GetUsersByXXX之类的方法,那么就有大量
List<User> result = new List<User>();

考虑到这一点,可以将new List<User>()  封装到方法中,这就是”工厂”模式了.
因为可能不是List<User> ,也许是Stack<User> 更或者是ObservableCollection<User>

所以配合泛型,代码如下:
public static class EmptyFactory
{
    public static T Empty<T>() where T : IEnumerable, new()
    {
        return new T();
    }
}

使用如下:
List<string> emptyList = new List<string>();
Stack<string> emptyStack = new Stack<string>();
ObservableCollection<string> emptyObserable = new ObservableCollection<string>();

emptyList = EmptyFactory.Empty<List<string>>();
emptyStack = EmptyFactory.Empty<Stack<string>>();
emptyObserable = EmptyFactory.Empty<ObservableCollection<string>>();
虽然这样写可以满足要求,但是可以发现基本没什么好处,写EmptyFactory还不如new 来得快。
不过如果能够缓存对象的话,也许EmptyFactory有作用。
考虑到这一点,为EmptyFactory增加缓存机制的代码如下,使用Dictionary<Type,Object> 来实现

 image

不过这种方法有一个缺陷,对于值类型而言,需要装箱。

其根本原因是因为EmptyFactory不知道T是什么,如果EmptyFactory知道T的话,那么就可以使用Dictionary<T,T> 的缓存了。

解决这个问题的思路是将EmptyFactory变成泛型类:

代码如下:

image

当然也可以EmptyFactory<List<User>>.Empty();

为什么不用Enumersble.Empty<T>方法呢?

因为Enumerable.Empty<T> 返回的是IEnumerable<T>对象。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 基于不要返回null之EmptyFactory的应用详解

相关文章

  • 2017-05-28C#使用控制台列出当前所有可用的打印机列表
  • 2017-05-28C#自定义控件VS用户控件
  • 2017-05-28C#单位转换器简单案例
  • 2017-05-28WinForm实现自定义右下角提示效果的方法
  • 2017-05-28C#图形区域剪切的实现方法
  • 2017-05-28C#获取两个时间的时间差并去除周末(取工作日)的方法
  • 2017-05-28C#给图片加水印的简单实现方法
  • 2017-05-28C#读写txt文件多种方法实例代码
  • 2017-05-28C#实现修改系统时间的方法
  • 2017-05-28探讨C#中Dispose方法与Close方法的区别详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#实现排列组合算法完整实例
    • WinForm项目开发中Excel用法实例解析
    • 关于C#程序优化的五十种方法
    • C# httpwebrequest访问HTTPS错误处理方法
    • C#中多态、重载、重写区别分析
    • C#定时关闭窗体实例
    • 探秘C# 6.0 的新特性
    • C#获取web.config配置文件内容的方法
    • C#6.0中10大新特性的应用和总结
    • C#中设计、使用Fluent API

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有