Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以不同的方式按类型选择列表中的子集_C#_Performance_Linq - Fatal编程技术网

C# 如何以不同的方式按类型选择列表中的子集

C# 如何以不同的方式按类型选择列表中的子集,c#,performance,linq,C#,Performance,Linq,我已经定义了一个接口集合,它存储了许多不同的实现。然后我只需要检索其中一个实现的子集。我需要用实现类型(而不是接口)来输入这个子集 我可以想出很多方法来做到这一点,但我想知道哪一种更有效。通过这样说,我意识到高效具有很大的意义(复杂性、内存/CPU消耗等) 换言之,你能告诉我如何执行这些操作吗 var myList = new List<IFoo>(); 当然,还有一种老式的手动循环方式: var mySubSet = new List<FooImpl1>(); for

我已经定义了一个接口集合,它存储了许多不同的实现。然后我只需要检索其中一个实现的子集。我需要用实现类型(而不是接口)来输入这个子集

我可以想出很多方法来做到这一点,但我想知道哪一种更有效。通过这样说,我意识到
高效
具有很大的意义(复杂性、内存/CPU消耗等)

换言之,你能告诉我如何执行这些操作吗

var myList = new List<IFoo>();
当然,还有一种老式的手动循环方式:

var mySubSet = new List<FooImpl1>();
foreach(var foo in myList)
{
    var fooImpl1 = foo as FooImpl1;
    if(fooImpl1 != null)
    {
        mySubSet.Add(fooImpl1);
    }
}
var mySubSet=newlist();
foreach(myList中的var foo)
{
var fooImpl1=foo作为fooImpl1;
如果(fooImpl1!=null)
{
mySubSet.Add(fooImpl1);
}
}
可能还有很多其他方法可以做到这一点,所以请不要犹豫,改进我的问题

var mySubSet = myList.Where(f => f is FooImpl).Cast<FooImpl>();
这并不是说效率更高,而是更具可读性(这也意味着工作效率)


这并不是说效率更高,而是更具可读性(这也意味着工作效率)。

使用类型的
可能不是完全重复的,但有很强的相关性:使用类型的
可能不是完全重复的,但有很强的相关性:
var mySubSet = new List<FooImpl1>();
foreach(var foo in myList)
{
    var fooImpl1 = foo as FooImpl1;
    if(fooImpl1 != null)
    {
        mySubSet.Add(fooImpl1);
    }
}
var mySubSet = myList.Where(f => f is FooImpl).Cast<FooImpl>();
var mySubSet = myList.OfType<FooImpl>().ToList();