加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 19:56:17 所属栏目:百科 来源:网络整理
导读:我有以下课程: public class PeopleInfo{ public virtual int ID {get; protected set;} public virtual Person Person1 {get;set;} public virtual Person Person2 {get;set;} public virtual ListPerson People { get { var p = new ListPerson(); p.Add(
我有以下课程:

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;
     }
   }
}

我正在使用NHibernate. Person类被用作组件,因为“PeopleInfo”表在每行中有超过1个人. People()属性背后的想法是提供一个可以循环的只读列表.有没有更好的方法来做到这一点,还是认为这个解决方案可以接受?

解决方法

The idea behind the People property is to provide a read only list that can be looped over. Is there a better way to do this or is this solution considered acceptable?

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读