C#方法命名约定:ToSomething vs. AsSomething

时间:2015-08-07 10:43:50

标签: c# naming-conventions

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

object.ToString()会很好

然而,例如,LINQ混合了两种变体,我无法找到它们之间的差异。 ToDictionary()ToList()AsParallel()AsQueryable(),...

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

2 个答案:

答案 0 :(得分:91)

$('#enquiry').on('change', function(e) { if($(this).val() === "cv") { $('input[name="cv"]').show(); } }); ToDictionaryToList为前缀,因为它们不一定保留原始集合或其属性的结构标识。

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

List<T>为前缀的方法不会执行任何这些操作 - 它们只是提供原始集合的替代视图。他们丰富了它。

答案 1 :(得分:26)

在Linq中,ToXXX方法都执行查询并从结果中创建新对象,而AsXXX方法产生的新查询在某种程度上是不同的。它可能是同一个对象,但通过不同的接口访问(AsEnumerable()这样做)或者它可能是一个改变功能的新对象(其他方法执行此操作,但有些方法检查它们是否可以返回给定对象,例如AsQueryable()如果已经实现source将返回IQueryable<T>,否则将返回EnumerableQuery<TElement>