我有一个控件,radtabstrip,它包含:public RadTabCollection Tabs { get; }。类radtabcollection继承自:public class RadTabCollection : ControlItemCollection, IEnumerable<RadTab>, IEnumerable
现在,我有一份考曼塔布的名单。此类继承:public class CormantRadTab : RadTab, ICormantControl<RadTabSetting>
我的目标是用radtabcollection填充cormantradtab列表。目前,我已经实现了:

List<CormantRadTab> oldTabs = new List<CormantRadTab>(Tabs.Count);
foreach( CormantRadTab tab in Tabs)
{
    oldTabs.Add(tab);
}

我真的觉得我应该能够做一些事情,比如:
List<CormantRadTab> oldTabs = new List<CormantRadTab>(Tabs.AsEnumerable<RadTab>());

但这与新列表期望的重载签名不匹配。如果我试着投下一个可数的Cormantradtab,我会收到其他错误。
正确的方法是什么?

最佳答案

您可以使用Enumerable.Cast<>

var oldTabs = Tabs.Cast<CormantRadTab>().ToList();

或者如果有一些非cormantradtab元素,并且您只想选择cormantradtab元素,请使用OfType<>
var oldTabs = Tabs.OfType<CormantRadTab>().ToList();

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

10-05 19:22