C# 方法命名约定:ToSomething 与 AsSomething
C# method naming conventions: ToSomething vs. AsSomething
当我为我的业务逻辑对象编写一些扩展方法时,我遇到了重命名转换方法的问题。 someObject.ToAnotherObject()
与广泛使用的 object.ToString()
相得益彰。
但是,例如,LINQ 混淆了这两种变体,我找不到它们之间的区别。 ToDictionary()
、ToList()
、AsParallel()
、AsQueryable()
、...
这两个命名约定之间有什么区别,我应该知道什么来决定是否使用我自己的 类?
ToDictionary
和 ToList
以 To
为前缀,因为它们不一定保留原始集合的结构标识或其属性。
- 将
List<T>
转换为 Dictionary<K, V>
会创建一个具有全新结构的集合。
- 将
HashSet<T>
转换为 List<T>
消除了集合的唯一性 属性。
以 As
为前缀的方法不会做任何这些事情 - 它们只是提供原始集合的替代 view。他们丰富了它。
在 Linq 中,ToXXX
方法都执行查询并根据结果创建一个新对象,而 AsXXX
方法生成一个在某些方面有所不同的新查询。它可能是同一个对象,但通过不同的接口访问(AsEnumerable()
这样做)或者它可能是一个改变功能的新对象(其他方法这样做,尽管有些检查它们是否可以 return 给定的对象,例如 AsQueryable()
将 return source
如果它已经实现了 IQueryable<T>
,否则创建一个新的 EnumerableQuery<TElement>
)。
当我为我的业务逻辑对象编写一些扩展方法时,我遇到了重命名转换方法的问题。 someObject.ToAnotherObject()
与广泛使用的 object.ToString()
相得益彰。
但是,例如,LINQ 混淆了这两种变体,我找不到它们之间的区别。 ToDictionary()
、ToList()
、AsParallel()
、AsQueryable()
、...
这两个命名约定之间有什么区别,我应该知道什么来决定是否使用我自己的 类?
ToDictionary
和 ToList
以 To
为前缀,因为它们不一定保留原始集合的结构标识或其属性。
- 将
List<T>
转换为Dictionary<K, V>
会创建一个具有全新结构的集合。 - 将
HashSet<T>
转换为List<T>
消除了集合的唯一性 属性。
以 As
为前缀的方法不会做任何这些事情 - 它们只是提供原始集合的替代 view。他们丰富了它。
在 Linq 中,ToXXX
方法都执行查询并根据结果创建一个新对象,而 AsXXX
方法生成一个在某些方面有所不同的新查询。它可能是同一个对象,但通过不同的接口访问(AsEnumerable()
这样做)或者它可能是一个改变功能的新对象(其他方法这样做,尽管有些检查它们是否可以 return 给定的对象,例如 AsQueryable()
将 return source
如果它已经实现了 IQueryable<T>
,否则创建一个新的 EnumerableQuery<TElement>
)。