更清洁的方式将集合转换为另一种类型?

Sea*_*son 4 c# linq

我有一个控件,RadTabStrip,其中包含:public RadTabCollection Tabs { get; }.RadTabCollection类继承自:public class RadTabCollection : ControlItemCollection, IEnumerable<RadTab>, IEnumerable

现在,我有一个CormantRadTab列表.该类继承:public class CormantRadTab : RadTab, ICormantControl<RadTabSetting>

我的目标是使用RadTabCollection填充CormantRadTab列表.目前,我实施了这个:

List<CormantRadTab> oldTabs = new List<CormantRadTab>(Tabs.Count);
foreach( CormantRadTab tab in Tabs)
{
    oldTabs.Add(tab);
}
Run Code Online (Sandbox Code Playgroud)

我真的觉得我应该能够做一些事情,比如:

List<CormantRadTab> oldTabs = new List<CormantRadTab>(Tabs.AsEnumerable<RadTab>());
Run Code Online (Sandbox Code Playgroud)

但这与New List期望的过载签名不匹配.如果我尝试强制转换AsEnumerable CormantRadTab,我会收到其他错误.

这样做的正确方法是什么?

Jon*_*eet 8

你可以使用Enumerable.Cast<>:

var oldTabs = Tabs.Cast<CormantRadTab>().ToList();
Run Code Online (Sandbox Code Playgroud)

或者,如果存在一些非CormantRadTab元素,并且您只想选择CormantRadTab元素,请使用OfType<>:

var oldTabs = Tabs.OfType<CormantRadTab>().ToList();
Run Code Online (Sandbox Code Playgroud)

(在这两种情况下,结果都是类型List<CormantRadTab>- 使用显式键入或隐式键入,无论您喜欢哪种.)