初始化集合属性好吗 - c#

初始化集合属性好吗?

例如,我的班级是

 public class Part
 {
        public int Id { get; set; }
        public int PartTypeId { get; set; }        
        public IList<Child> Instructions { get; set; }
 }

初始化这样的指令是一个好主意吗?:

public IList<Child> Instructions { get; set; } = new List<Child>();

什么是最佳做法,默认初始化还是不初始化子集合属性?
考虑延迟初始化好吗?

参考方案

好吧,如果您不初始化您的收藏夹,您将无法使用它们。如果要使用一个集合,不妨尽快对其进行初始化,这样就可以使用它而不必担心空引用。
不需要懒惰地初始化一个空集合。空集合不需要太多的工作来初始化,初始化后也不会占用太多的内存。即使您最终没有在应用程序的生存期内填充它,也不会对性能产生可衡量的影响。

非空收藏品的故事有些不同。如果它是原始值的一小部分集合,那么也可能不会有太大的不同。但是,如果这是启动时不需要的大型,复杂对象的集合,那么最好懒惰地这样做。是否使用属性声明中的new单独进行填充,还是按需一次全部new填充,都是一个优先事项(以及您的应用程序是否依赖于那里的集合) -大多数应用程序会询问是否填充了集合,这使我们回到了关于空集合的观点。

正如Damien_The_Unbeliever指出的那样,您可能不希望集合类的任何人都可以设置其集合属性,如果有的话。您的所有收集操作都将在收集本身上执行,而无需实际更改(或删除)收集,因此不需要setter,实际上应该将其排除在外:

public IList<Child> Instructions { get; } = new List<Child>();

将谓词<T>转换为Func <T,bool> - c#

我有一个包含成员Predicate的类,希望在Linq表达式中使用该类:using System.Linq; class MyClass { public bool DoAllHaveSomeProperty() { return m_instrumentList.All(m_filterExpression); } private IEnumerable&…

与哪些运算符>>兼容 - java

我这里没有什么代码int b=3; b=b >> 1; System.out.println(b); 它可以完美工作,但是当我将变量b更改为byte,short,float,double时,它包含错误,但是对于变量int和long来说,它可以完美工作,为什么它不能与其他变量一起工作? 参考方案 位移位运算符(例如>>)与任何整数类型兼…

通过Maven编译器插件不会发生有限的包含和排除 - java

我正在使用3.6.0版的maven编译器插件,在此我们只想在特定文件夹中编译一个文件,而在该位置编译所有其他文件。例如:在文件夹应用程序中有14个文件,从那我只希望编译1个文件,但它编译了所有文件,如果我要排除,则它也不起作用。 <sourceDirectory>${basedir}/../src/java</sourceDirectory…

当我所有的都是T时,如何返回Interface <T>的实例? - java

我有一个界面:public interface ILoginResult<T> { public T get(); } 我有一个LoginPage对象:public class LoginPage<T> { ... public ILoginResult<T> login(...) { ... } } 我也有一些登录页面对…

Java中的“ <<”运算符 - java

最喜欢的语句来自Java的Character类:(1 << Character.PARAGRAPH_SEPARATOR)) >> type PARAGRAPH_SEPARATOR是字节,type是整数。这句话中的操作员,他们做什么?如何以及在哪里可以使用这些运算符?这是oracles java.lang.Character文档。该类中…