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
个字符串。
答案 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,因此,只要集合包含许多项目,它就非常有用,但应该谨慎使用。实现此接口的一些集合类是foreach
,ObservableCollection<T>
,List<T>
。
Dictionary<TKey,TValue>
是一个实现ObservableCollection<T>
接口的集合类。此外,它是一个特殊的集合,因为它会在集合本身发生更改时引发事件,例如添加或删除某些项目时。它主要用于WPF应用程序。
答案 1 :(得分:1)
IEnumerable
是您可以枚举的项目列表,即您可以在一个方向上循环,从第一个元素到最后一个元素。
可观察集合实现接口INotifyCollectionChanged
和INotifyPropertyChanged
。它是一个列表,只要内容发生更改(添加,删除项目)或属性发生更改,就会引发事件。
IEnumerable
就足够了;如果您需要随时访问任何元素,最好使用更强大的实现,例如List。 IEnumerable
是集合界面中“最弱”的,但通常就足够了。