C# 方法命名约定:ToSomething 与 AsSomething

C# method naming conventions: ToSomething vs. AsSomething

当我为我的业务逻辑对象编写一些扩展方法时,我遇到了重命名转换方法的问题。 someObject.ToAnotherObject() 与广泛使用的 object.ToString() 相得益彰。

但是,例如,LINQ 混淆了这两种变体,我找不到它们之间的区别。 ToDictionary()ToList()AsParallel()AsQueryable()、...

这两个命名约定之间有什么区别,我应该知道什么来决定是否使用我自己的 类?

ToDictionaryToListTo 为前缀,因为它们不一定保留原始集合的结构标识或其属性。

  • List<T> 转换为 Dictionary<K, V> 会创建一个具有全新结构的集合。
  • HashSet<T> 转换为 List<T> 消除了集合的唯一性 属性。

As 为前缀的方法不会做任何这些事情 - 它们只是提供原始集合的替代 view。他们丰富了它。

在 Linq 中,ToXXX 方法都执行查询并根据结果创建一个新对象,而 AsXXX 方法生成一个在某些方面有所不同的新查询。它可能是同一个对象,但通过不同的接口访问(AsEnumerable() 这样做)或者它可能是一个改变功能的新对象(其他方法这样做,尽管有些检查它们是否可以 return 给定的对象,例如 AsQueryable() 将 return source 如果它已经实现了 IQueryable<T>,否则创建一个新的 EnumerableQuery<TElement>)。