public class Kuku
{
private LinkedList<MyClass> m_list;
public IEnumerable<MyClass> Locations { get { return m_list; } }
}
我需要在public class FindAllMyClass
中实施
迭代MyClass
中所有Kuku
个对象的方法 - 我不知道如何使用Locations
中的Kuku
属性。
我应该定义IEnumerable Locations还是只使LinkedList m_list成为公共属性?
我应该定义IEnumerable<MyClass> Locations
还是仅将LinkedList<MyClass> m_list
定义为public
属性?
public class FindAllMyClass
{
public void itMethod(Kuku input)
{
//This is not correct
foreach (MyClass c in input.Locations)
{
}
}
}
答案 0 :(得分:2)
为什么要定义
IEnumerable Locations
而不只是让LinkedList m_list
成为公共财产?
几个可能的原因:
如果您以后决定不想将其作为LinkedList<>
而是作为常规List
实施,该怎么办?还是一个懒惰的集合类型?还是数组?
将该集合公开为通用IEnumerable<T>
,您可以在不更改公共合同的情况下更改内部实施。
如果您将集合设为属性(具有get; set;
访问者),则允许客户端添加,删除甚至替换整个列表。将其公开为IEnumerable
表示该列表意图是只读的(除非您在其他地方公开Add
方法)。
我不知道如何使用Kuku的Locations属性。
当然你这样做 - 你已经在你的样本中做到了:
foreach (MyClass c in input.Locations)
{
}
或者您可以使用Linq搜索或汇总集合中的数据(foreach
仍适用于更新实例。
答案 1 :(得分:0)
您可以使用LINQ来对象:
input.Locations.Where(x=> x.Property1 == value1 && x.Property2 > value2);
答案 2 :(得分:0)
IEnumerable
为您提供了一种方法,可以从您的类中公开具有以下属性的列表:
LINQ
,foreach
和其他各种语言结构很好地结合在一起