作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我希望有人能帮助我理解这样的事情是否/如何可能。
在这种情况下,假设您正在尝试像电子表格或数据库一样对网格建模,但每列中的数据只能是一种数据类型。
示例:第 1 列只能包含整数。
我创建了一个通用类来模拟如下所示的列结构:
public class CollectionColumn<T>
{
private string _name;
private string _displayName;
private List<T> _dataItems = new List<T>();
public string Name {
get { return _name; }
set { _name = value; }
}
public string DisplayName {
get { return _displayName; }
set { _displayName = value; }
}
public List<T> Items {
get { return _dataItems; }
set { _dataItems = value; }
}
}
现在我想做的是为各种列(可能有 CollectionColumn、CollectionColumn 等)创建一个容器,它有自己的属性,但我不确定如何做到这一点,我仍然可以访问这些列以及当我不知道它们的类型时它们中的数据。
这是一个 .NET 2.0 项目,所以像 dynamic 这样的东西是行不通的,也许是一个对象列表?我也不确定是否有办法通过接口(interface)来做到这一点。
public class ColumnCollection
{
public int Id { get; set; }
public string ContainerName { get; set; }
private List<CollectionColumn<T>> _columns;
public List<CollectionColumn<T>> Columns {
get { return _columns; }
set { _columns = value; }
}
}
我想要做的是将各种 CollectionColumn 添加到 ColumnCollection 的 Columns 集合中,这样我就可以拥有包含各种类型数据的列。
非常感谢任何帮助。
最佳答案
这是一个相当普遍的问题。您需要做的是声明泛型类继承自的非泛型基类或泛型类实现的非泛型接口(interface)。然后,您可以制作该类型的收藏。
例如,
public abstract class CollectionColumnBase
{
private string _name;
private string _displayName;
public string Name {
get { return _name; }
set { _name = value; }
}
public string DisplayName {
get { return _displayName; }
set { _displayName = value; }
}
public abstract object GetItemAt(int index);
}
public class CollectionColumn<T> : CollectionColumnBase
{
private List<T> data = new List<T>();
public overrides object GetItemAt(int index)
{
return data[index];
}
public List<T> Items
{
get { return data; }
set { data = value; }
}
}
public class ColumnCollection
{
public int Id { get; set; }
public string ContainerName { get; set; }
private List<CollectionColumnBase> _columns;
public List<CollectionColumnBase> Columns {
get { return _columns; }
set { _columns = value; }
}
}
关于c# - 非泛型类是否可能包含 .NET(C# 或 VB.NET)中的泛型列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12023316/
我是一名优秀的程序员,十分优秀!