金寨县住房和城乡建设部网站,网站建设首选易网宣,seo收录查询工具,苏州手机网站建设方法咨询区 Omu#xff1a;我是一个 C# 菜鸟#xff0c;说实话#xff0c;这个问题是一个非常困惑于我们这样初学者的一个问题#xff0c;我想知道实际开发中的 最佳实践 应该是什么样的#xff1f;回答区 user1228#xff1a;如果要我选的话#xff0c;我会用 空集合#… 咨询区 Omu我是一个 C# 菜鸟说实话这个问题是一个非常困惑于我们这样初学者的一个问题我想知道实际开发中的 最佳实践 应该是什么样的回答区 user1228如果要我选的话我会用 空集合为什么这么说我先举个例子
if(myInstance.CollectionProperty ! null)
{foreach(var item in myInstance.CollectionProperty)/* arrgh */
}如果你的代码返回的是 null那么你必然会一直遇到上面这样的烂代码你需要无时无刻的焦虑 CollectionProperty 是否为null...接下来从属性谈起我认为最佳实践就是初始化的时候 new list 然后封死 set ,类似下面代码
public ListFoo Foos { get; } new ListFoo();如果你的方法返回的是 集合 类型最好的方式就是用 空集合 替代 null 参考如下代码
public IEnumerableFoo GetMyFoos()
{return InnerGetFoos() ?? Enumerable.EmptyFoo();
}Karmic Coder因为 null 不会创建任何对象理论上它的效率会更高不利点就是你需要在多个地方判断 null 的情况。从语义上来说两者不是一个概念但他们的区别是微妙的在特定场景下通常某一个会比另一个更好。点评区 其实在设计模式中有一个叫做 Null Object pattern 不过设计模式考虑更多的是框架设计而不偏效率所以我还是比较赞同 Karmic Coder 大佬所说。