IEnumerable和ObservableCollection有什么区别?

时间:2015-02-06 10:52:16

标签: c# oop

IEnumerable&之间有什么区别? C#中的ObservableCollection

例如,在这段代码中:

public class RecipeDataItem
{        
    public RecipeDataItem(String uniqueId, String title, String subtitle, String description, String imagePath, String tileImagePath, int prepTime, String directions, IEnumerable<string> ingredients)
    {
        this.UniqueId = uniqueId;
        this.Title = title;
        this.Subtitle = subtitle;
        this.Description = description;
        this.ImagePath = imagePath;
        this.TileImagePath = tileImagePath;
        this.PrepTime = prepTime;
        this.Directions = directions;
        this.Ingredients = new ObservableCollection<string>(ingredients);
    }

    public string UniqueId { get; private set; }
    public string Title { get; private set; }
    public string Subtitle { get; private set; }
    public string Description { get; private set; }
    public string ImagePath { get; private set; }
    public string TileImagePath { get; set; }
    public int PrepTime { get; set; }
    public string Directions { get; set; }
    public ObservableCollection<string> Ingredients { get; private set; }

    public override string ToString()
    {
        return this.Title;
    }
}

我们正在定义一个变量Ingredients,它是ObservableCollection个字符串,&amp;然后我们在参数化构造函数ingredients中定义一个变量,它是IEnumerable个字符串。

2 个答案:

答案 0 :(得分:3)

嗯,首先IEnumerable<T>ObservableCollection<T>是你甚至无法相互比较的东西。主要原因是IEnumerable<T>是一个接口(.NET框架中的所有接口都有一个以I开头的名称,如ICollection<T>IList<T>)和{{1是一个集合类,它实现了接口ObservableCollection<T>

接口,如IEnumerable<T>,是一种抽象的东西,你可以在其中声明方法的签名,但是你无法实现它们的逻辑。实现接口的类将实现接口中存在的所有方法的逻辑。通常,从服务或应用程序的公共方法返回类似IEnumerable<T>的集合,以便稍后使用IEnumerable<string> results循环枚举它。此外,此集合具有lazy evaluation,因此,只要集合包含许多项目,它就非常有用,但应该谨慎使用。实现此接口的一些集合类是foreachObservableCollection<T>List<T>

Dictionary<TKey,TValue>是一个实现ObservableCollection<T>接口的集合类。此外,它是一个特殊的集合,因为它会在集合本身发生更改时引发事件,例如添加或删除某些项目时。它主要用于WPF应用程序。

答案 1 :(得分:1)

IEnumerable是您可以枚举的项目列表,即您可以在一个方向上循环,从第一个元素到最后一个元素。

可观察集合实现接口INotifyCollectionChangedINotifyPropertyChanged。它是一个列表,只要内容发生更改(添加,删除项目)或属性发生更改,就会引发事件。

如果您只想迭代内容,

IEnumerable就足够了;如果您需要随时访问任何元素,最好使用更强大的实现,例如List。 IEnumerable是集合界面中“最弱”的,但通常就足够了。