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

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

然而,LINQ,例如,混合了两个变种,我找不到他们之间的差异。 ToDictionary()ToList()AsParallel()AsQueryable() ,…

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

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

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

前缀为As方法不做任何这些事情 – 它们只是提供原始集合的替代视图 。 他们充实它。

在Linq中, ToXXX方法都执行查询并从结果中创build一个新的对象,而AsXXX方法产生一个不同的新查询。 它可能是相同的对象,但通过不同的接口访问( AsEnumerable()这样做),或者它可能是一个新的对象,改变了function(其他方法这样做,虽然一些检查,看看他们是否可以只返回给定的对象,例如AsQueryable()将返回source如果它已经实现了IQueryable<T> ,或者创build一个新的EnumerableQuery<TElement> )。