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();