相关疑难解决方法(0)

何时在Linq中使用Cast()和Oftype()

我知道有两种方法可以IEnumerableArraylistLinq中输出类型,并想知道在哪些情况下使用它们?

例如

IEnumerable<string> someCollection = arrayList.OfType<string>()
Run Code Online (Sandbox Code Playgroud)

要么

IEnumerable<string> someCollection = arrayList.Cast<string>()
Run Code Online (Sandbox Code Playgroud)

这两种方法有什么区别,我应该在哪里应用每种情况?

.net c# linq

205
推荐指数
4
解决办法
7万
查看次数

从IEnumerable转换为IEnumerable <object>

我更喜欢使用IEnumerable<object>,对于LINQ扩展方法是定义的,不是IEnumerable,所以我可以使用,例如,range.Skip(2).不过,我也喜欢使用IEnumerable,对于T[]隐式转换为IEnumerable是否T是引用类型或值类型.对于后一种情况,不涉及拳击,这是好的.结果,我能做到IEnumerable range = new[] { 1, 2, 3 }.似乎不可能将两者的优点结合起来.无论如何,IEnumerable当我需要应用LINQ方法时,我选择安顿下来并做一些演员.

这个 SO线程,我开始知道range.Cast<object>()能够完成这项工作.但它会产生性能开销,这在我看来是不必要的.我尝试执行直接编译时强制转换(IEnumerable<object>)range.根据我的测试,它适用于参考元素类型,但不适用于值类型.有任何想法吗?

仅供参考,问题源于 GitHub问题.我使用的测试代码如下:

static void Main(string[] args)
{
    // IEnumerable range = new[] { 1, 2, 3 }; // won't work
    IEnumerable range = new[] { "a", "b", "c" };
    var range2 = (IEnumerable<object>)range;
    foreach (var item in range2)
    {
        Console.WriteLine(item);
    }
}
Run Code Online (Sandbox Code Playgroud)

c# linq arrays ienumerable language-lawyer

13
推荐指数
2
解决办法
2203
查看次数

为什么.NET中的这么多命名集合没有实现IEnumerable <T>?

随机示例:

ConfigurationElementCollection
Run Code Online (Sandbox Code Playgroud)

.Net有很多这些WhateverCollection没有实现的IEnumerable<T>小类,这意味着我不能将Linq用于开箱即用的对象.甚至在Linq之前,你会认为他们会想要使用泛型(我相信它已经在C#2中一直被引入)

似乎我一直遇到这些讨厌的小集合类型.有一些技术原因吗?

c# ienumerable

12
推荐指数
1
解决办法
725
查看次数

如何从IEnumerable转换为IEnumerable <T>?

假设我在设计时知道类型,IEnumerable<T>IEnumerable没有办法从无反射中得到一个?

我有这个

foreach(DirectoryEntry child in de.Children)
{
   // long running code on each child object
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试启用并行化,就像这样

Parallel.ForEach(de.Children, 
    (DirectoryEntry child) => { // long running code on each child });
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为de.Children属于类型DirectoryEntries.它实现IEnumerable但不实现IEnumerable<DirectoryEntry>.

c# parallel-processing active-directory task-parallel-library

2
推荐指数
1
解决办法
433
查看次数