我有一个接口IDoc和一个名为Doc的抽象类。然后我有一个名为BookDoc的类继承自Doc,另一个类JournalDoc也继承自Doc。
现在我想做的是将BindingList<BookDoc>
或BindingList<JournalDoc>
绑定到自定义DataGridView。然后,我希望能够访问它们都从Doc类继承的Errors属性。
半工作示例:
var dataSource = this.DataSource as BindingSource;
BindingList<BookDoc> tempBookDocs = dataSource.DataSource as BindingList<BookDoc>;
var Docs = new List<IDoc>();
foreach (var tempDoc in tempBookDocs)
{
Docs.Add(tempDoc);
}
上面的示例有效,我得到一个已填充的文档列表,我可以访问Errors属性,但仍然必须硬编码最初绑定的列表类型。
我想做的事情是这样的,虽然我不确定是否可能。
var dataSource = this.DataSource as BindingSource;
BindingList<Doc> Docs = dataSource.DataSource as BindingList<Doc>;
这给了我一个空文档列表。
答案 0 :(得分:2)
如果您使用的是.NET 4.0,则可以使用IEnumarable<>
来利用covariance:
IEnumarable<Doc> tempBookDocs = dataSource.DataSource as IEnumarable<Doc>;
var Docs = new List<IDoc>();
foreach (var tempDoc in tempBookDocs)
{
Docs.Add(tempDoc);
}
如果您使用的是.NET 3.5,则可以使用LINQ OfType
扩展方法:
IEnumarable<Doc> myDocs = ((IEnumarable)dataSource.DataSource).OfType<Doc>();
var Docs = new List<IDoc>();
foreach (var tempDoc in myDocs)
{
Docs.Add(tempDoc);
}