在属性中声明变量被认为是不好的做法吗?

new*_*d91 3 c# nhibernate

我有以下课程:

public class PeopleInfo
{
   public virtual int ID {get; protected set;}
   public virtual Person Person1 {get;set;}
   public virtual Person Person2 {get;set;}

   public virtual List<Person> People
   {
     get
     {
        var p = new List<Person>();
        p.Add(Person1);
        p.Add(Person2);
        return p;
     }
   }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用NHibernate.所述Person类被用作一个部件,因为"PeopleInfo"表具有多于1人的每一行英寸 People()属性背后的想法是提供一个可以循环的只读列表.有没有更好的方法来做到这一点,或者这个解决方案是否可以接受?

Eri*_*ert 11

People属性背后的想法是提供一个可以循环的只读列表.有没有更好的方法来做到这一点,或者这个解决方案是否可以接受?

如果这是你的意图那么你还没有实现它; 你提供了一个可以循环的可变列表.

幸运的是,每次都提供不同的可变列表,但您仍然提供可变列表.

我倾向于实际提供一个不可变的列表.有很多方法可以做到这一点.如果您实际提供了一个不可变列表,那么您还可以获得额外的好处,即可以懒惰地计算列表,然后无限期地缓存和重新使用,而不是每次请求时重新构建.

如果您需要索引访问,那么我将创建一个ReadOnlyCollection并将其包装在列表的单个实例周围,然后缓存并重新使用只读集合.请注意,如果您改变基础列表,则只读集合将显示为mutate; 它只是一个只读列表,它不是一个不可变列表.

如果您不需要索引访问,那么我会通过返回IEnumerable<T>而不是表示List<T>.然后,您可以返回您选择的任何不可变集合.

  • 这不能回答标题中的问题.:-P然而,OP可能会更清楚他可能要问的是什么...... (4认同)