我有一个控件,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,我会收到其他错误.
这样做的正确方法是什么?
你可以使用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>- 使用显式键入或隐式键入,无论您喜欢哪种.)