【发布时间】:2013-10-16 12:45:44
【问题描述】:
现在是一个理论问题。
据我了解,方法用于实现某种行为,而属性用于保留对象的某些状态。
我发现XContainer.Nodes() 和XElement.Attributes() 被实现为方法,而不是属性。而且,恕我直言,其他应该作为属性实现的方法:XNode.ElementsAfterSelf()、XNode.ElementsBeforeSelf()XNode.NodesAfterSelf() 等等。
所以,所有返回 IEnumerable of something 的东西都在 Linq to XML 中实现为方法(而不是属性)。
这是什么原因?我的意思是它是否适用于某些特定情况,或者它只是一个错误,例如 String.Split() 方法,它返回 char array 而不是更多预期的 IEnumerable<char>?
【问题讨论】:
-
我会说,这些方法是惰性的(使用
yield return而不是固态集合转换为IEnuemerable,一次只返回一个元素)是它们是方法的原因,不是属性。 -
你可以以同样的方式从属性 get 访问器中产生 IEnumerable 的返回项,不是吗?
-
String.Split()早于泛型,所以IEnumerable<char>(或IEnumerable<string>)在创建时并不存在。
标签: c# .net xml linq-to-xml