亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

基于不要返回null之EmptyFactory的應用詳解

2020-01-24 03:20:56
字體:
來源:轉載
供稿:網友
有很多書上都提出過一個建議:不要返回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> 來實現
復制代碼 代碼如下:

public static class EmptyFactory
{
    private static Dictionary<Type, object> cacheEmptyObjects =
                     new Dictionary<Type, object>();
    public static T Empty<T>() where T : IEnumerable, new()
    {
        Type genericType = typeof(T);
        if (cacheEmptyObjects.ContainsKey(genericType))
        {
            return (T)cacheEmptyObjects[genericType];
        }
        else
        {
            T tempEmptyObject = new T();
            cacheEmptyObjects.Add(genericType, tempEmptyObject);
            return tempEmptyObject;
        }
    }
}

測試代碼如下:

 image

不過這種方法有一個缺陷,對于值類型而言,需要裝箱。

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

解決這個問題的思路是將EmptyFactory變成泛型類:

代碼如下:

復制代碼 代碼如下:

public static class EmptyFactory<T> where T : IEnumerable, new()
{
    private static Dictionary<Type, T> cacheEmptyObjects = new Dictionary<Type, T>();
    public static T Empty()
    {
        Type genericType = typeof(T);
        if (cacheEmptyObjects.ContainsKey(genericType))
        {
            return cacheEmptyObjects[genericType];
        }
        else
        {
            T tempEmptyObject = new T();
            cacheEmptyObjects.Add(genericType, tempEmptyObject);
            return tempEmptyObject;
        }
    }
}

使用的時候,只需要

image

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

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

因為Enumerable.Empty<T> 返回的是IEnumerable<T>對象。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久亚洲精品视频| 国产精品一区二区三区久久| 川上优av一区二区线观看| 国产精品久久久久免费a∨| 亚洲三级黄色在线观看| 欧美视频在线免费| 成人网中文字幕| 欧美视频裸体精品| 国产欧美精品日韩精品| 欧美日韩日本国产| 亚洲国产精品va在线看黑人| 日韩视频―中文字幕| 激情成人中文字幕| 国产精品电影观看| 一区二区三区视频免费| 自拍亚洲一区欧美另类| 最近2019年好看中文字幕视频| 91深夜福利视频| 亚洲精品久久久一区二区三区| 欧美不卡视频一区发布| 欧美精品久久久久久久久| 91av在线视频观看| 97久久久久久| 亚洲一区二区三区xxx视频| 国产精品美女在线观看| 亚洲电影免费观看| 7777kkkk成人观看| 日韩精品在线观看一区| 欧美日韩中文字幕日韩欧美| 69视频在线播放| 国产不卡av在线免费观看| 九九久久久久99精品| 色婷婷综合成人| 精品人伦一区二区三区蜜桃免费| 久久精品电影网站| 自拍偷拍免费精品| 激情久久av一区av二区av三区| 国产女人精品视频| 亚洲欧美国产一区二区三区| 精品久久久久久久久中文字幕| 久久91亚洲精品中文字幕| 亚洲国产精品成人一区二区| 日韩网站免费观看| 亚洲精品美女久久久久| 成人免费在线视频网站| 青青在线视频一区二区三区| 成人免费黄色网| 国产精品美女久久久久av超清| 91精品国产九九九久久久亚洲| 久久天天躁狠狠躁夜夜躁| 美日韩精品视频免费看| 国产香蕉精品视频一区二区三区| 国产91精品久久久久久| 色香阁99久久精品久久久| 日韩精品中文字幕在线观看| 日韩成人xxxx| 国产午夜精品免费一区二区三区| 亚洲视频网站在线观看| 亚洲国产欧美一区二区三区久久| www.久久久久久.com| 欧美美最猛性xxxxxx| 亚洲精品日韩久久久| 欧美国产在线视频| 久久精品久久久久| 久久男人av资源网站| 亚洲最新在线视频| 色偷偷9999www| 国产成人福利夜色影视| 欧美日韩人人澡狠狠躁视频| 国产精品成av人在线视午夜片| 国产日本欧美视频| 欧美孕妇与黑人孕交| 成人激情综合网| 欧美日韩亚洲视频| 成人在线视频网站| 91在线高清视频| 欧美黑人性生活视频| 一区二区三区视频在线| 欧美性猛交xxxx免费看漫画| 69av在线播放| 日韩在线观看免费全| 日本sm极度另类视频| 国产日产欧美a一级在线| 色一区av在线| 在线播放日韩欧美| 伊人成人开心激情综合网| 国产精品第一页在线| 国内精品久久久| 色综合男人天堂| 91亚洲国产精品| 欧美在线激情网| 国产成人高清激情视频在线观看| 国产日韩在线亚洲字幕中文| 中文字幕久热精品在线视频| 亚洲精品色婷婷福利天堂| 日韩久久免费视频| 国产精品69精品一区二区三区| 久久久久久久久电影| 国产精品久久久久久久一区探花| 国产精品最新在线观看| 日韩有码在线播放| 国产精品入口免费视| 亚洲va国产va天堂va久久| 国产精品久久久久久久久久三级| 韩国三级日本三级少妇99| 成人妇女免费播放久久久| 亚洲精品xxx| 国产一区二区成人| 午夜精品久久久久久久久久久久久| 久久国产精品久久国产精品| 91亚洲国产精品| 亚洲精品视频播放| 成人午夜一级二级三级| 国语自产偷拍精品视频偷| 国产免费一区二区三区在线能观看| 成人乱人伦精品视频在线观看| 欧美激情第1页| 成人欧美一区二区三区黑人| 精品国产91久久久久久老师| 亚洲综合av影视| 成人黄色av免费在线观看| 欧美性xxxxhd| 日韩av中文在线| 日韩精品久久久久| 久久视频免费观看| 国产亚洲精品久久久优势| 久久久久久久999| 亚洲精品一区av在线播放| 91久久精品美女| 亚洲午夜女主播在线直播| 国产在线观看91精品一区| 中文字幕av一区二区三区谷原希美| 日韩中文综合网| 国产午夜精品一区二区三区| 国产精品久久久久久久久久新婚| 日韩黄色高清视频| 国产精品久久久久久av下载红粉| 欧美日韩在线视频一区二区| 国产精品日日做人人爱| 亚洲天堂久久av| 日韩中文字幕在线视频播放| 亚洲欧美中文字幕在线一区| 尤物yw午夜国产精品视频| 国产激情999| 92看片淫黄大片欧美看国产片| 亚洲精品有码在线| 欧美一级高清免费| 欧美又大粗又爽又黄大片视频| 亚洲一级黄色片| 国模精品系列视频| 国产在线999| 亚洲色在线视频| 91网站在线看| 亚洲天堂男人天堂| 8x拔播拔播x8国产精品| 色综合天天综合网国产成人网| 亚洲天堂日韩电影| 91香蕉嫩草神马影院在线观看| 欧美激情2020午夜免费观看| 92看片淫黄大片看国产片| 国产精品av免费在线观看| 91精品在线播放| 国产精品999999| 日韩电影免费观看中文字幕|