当我为业务逻辑对象编写一些扩展方法时,我遇到了重命名转换方法的问题。对于广泛使用的someObject.ToAnotherObject()
。
object.ToString()
会很好
然而,例如,LINQ混合了两种变体,我无法找到它们之间的差异。 ToDictionary()
,ToList()
,AsParallel()
,AsQueryable()
,...
这两个命名约定之间有什么区别,我应该知道如何决定是否使用我自己的类?
答案 0 :(得分:91)
$('#enquiry').on('change', function(e) {
if($(this).val() === "cv") {
$('input[name="cv"]').show();
}
});
和ToDictionary
以ToList
为前缀,因为它们不一定保留原始集合或其属性的结构标识。
To
转换为List<T>
会创建一个具有全新结构的集合。Dictionary<K, V>
转换为HashSet<T>
会删除集合的唯一性属性。以List<T>
为前缀的方法不会执行任何这些操作 - 它们只是提供原始集合的替代视图。他们丰富了它。
答案 1 :(得分:26)
在Linq中,ToXXX
方法都执行查询并从结果中创建新对象,而AsXXX
方法产生的新查询在某种程度上是不同的。它可能是同一个对象,但通过不同的接口访问(AsEnumerable()
这样做)或者它可能是一个改变功能的新对象(其他方法执行此操作,但有些方法检查它们是否可以返回给定对象,例如AsQueryable()
如果已经实现source
将返回IQueryable<T>
,否则将返回EnumerableQuery<TElement>
。