linq AddRange添加到我的哪个收藏?

b0zn9rqh  于 2022-12-06  发布在  其他
关注(0)|答案(3)|浏览(151)

在查看下面的代码时,我无法找出this.AddRange(hoteltasks);在第21行。
我想知道AddRange方法将hoteltasks的元素添加到哪个集合。

public class HotelViewModel : ObservableRangeCollection<RoomViewModel>, INotifyPropertyChanged
{
    // It's a backup variable for storing TaskViewModel objects
    private ObservableRangeCollection<RoomViewModel> hoteltasks = new ObservableRangeCollection<RoomViewModel>();

    public HotelViewModel()
    {
    }

    public HotelViewModel(Hotel hotel, bool expanded = false)
    {
        this.Hotel = hotel;
        this._expanded = expanded;

        foreach (Room task in hotel.Tasks)
        {
            hoteltasks.Add(new RoomViewModel(task));
        }
        if (expanded)
            this.AddRange(hoteltasks);
    }
 
    private bool _expanded;
    public bool Expanded
    {
        get { return _expanded; }
        set
        {
            if (_expanded != value)
            {
                _expanded = value;
                OnPropertyChanged(new PropertyChangedEventArgs("Expanded"));
                  
                if (_expanded)
                {
                    this.AddRange(hoteltasks);
                }
                else
                {
                    this.Clear();
                }
            }
        }
    }
}
w8ntj3qf

w8ntj3qf1#

AddRangethis上被调用,因此hoteltasks的内容被添加到this
this引用HotelViewModel的当前示例。由于第21行在构造函数中,因此this引用新创建的HotelViewModel示例。在Expanded的setter代码中,this.AddRange(hoteltasks);再次出现。在那里,当前示例是您访问Expanded的示例。有关更多信息,请参阅What is the meaning of "this" in C#
虽然this是一个名为“HotelViewModel”的示例,听起来不像是集合,但它 * 实际上 * 是一个集合。这是因为它声明为继承自ObservableRangeCollection<RoomViewModel>,所以它具有ObservableRangeCollection<RoomViewModel>的所有行为,例如能够将RoomViewModel存储在其中。并且能够将RoomViewModel的范围添加到其中。

sd2nnvve

sd2nnvve2#

HotelViewModel是一个列表类型的可观测范围集合
如果在某处创建新示例

HotelViewModel myNewModel= new HotelViewModel(hotel,true);

那么myNewModel就是List(this.AddRange(hoteltasks);)
尝试

var t = myNewModel.ToList();
snvhrwxg

snvhrwxg3#

ObservableRangeCollection继承自ObservableCollectionObservableCollection继承了实现ICollection接口Collection<T>
Collection<T>具有受保护的项目属性;
https://learn.microsoft.com/en-us/dotnet/api/system.collections.objectmodel.collection-1.items?view=net-6.0
因此this.AddRange()Items属性中添加项

相关问题