现在是一个理论问题。
据我所知,方法用于实现某种行为,属性用于保留对象的某些状态。
我发现XContainer.Nodes()
以及XElement.Attributes()
是作为方法实现的,而不是属性。而且,恕我直言,应该作为属性实现的其他方法:XNode.ElementsAfterSelf()
,XNode.ElementsBeforeSelf()
XNode.NodesAfterSelf()
等等。
因此,返回IEnumerable of something
的所有内容都是作为Linq to XML中的方法(而不是属性)实现的。
这是什么原因?我的意思是它是否适用于某些特定情况,或者仅仅是例如String.Split()
方法的错误,它返回char array
而不是更期望的IEnumerable<char>
?
答案 0 :(得分:1)
引用Microsoft "Choosing Between Properties and Methods":
通常,方法表示操作,属性表示数据。属性意味着像字段一样使用,这意味着属性不应该在计算上复杂或产生副作用。如果它没有违反以下准则,请考虑使用属性而不是方法,因为经验不足的开发人员会发现更易于使用的属性。
如果成员代表该类型的逻辑属性,请考虑使用属性。
例如,BorderStyle是一个属性,因为边框的样式是ListView的属性。
如果属性的值存储在进程内存中,并且属性只提供对值的访问,请使用属性而不是方法。
您还可以阅读"Properties vs Methods" here
我喜欢上一个链接中的这个解释
操作非常昂贵,您希望与用户沟通,他们应该考虑缓存结果。