我相对较新C#
- 但来自C/C++
背景。
我需要一个类似于的数据类型(类)DataTable
,但允许存储的列保存“简单”类型(int、float、boolean、[string])以及相同类型的数据(以便一个列可以保存另一个表,该表也具有存储表等的列)。
用 C++ 的话说,我所描述的是这样的:
typedef union { /*... */ } ValueType;
typedef std::vector<ValueType> ColumnValues;
class Column
{
private:
std::string m_name ;
ColumnValues m_values;
public:
Column(const std::string& name);
// ...
}
class Table
{
private:
std::string m_name;
std::vector<Column> m_cols;
public:
Table(const std::string& name, const std::vector<Column> *cols_ptr = NULL);
// ...
};
列可以保存任何有效的数据类型 - 其中包括表数据类型(因此具有隐式无限嵌套功能)。
我最初的想法是继承DataTable
- 但我想我应该来这里检查是否:
- 如果这样的类已经存在于某处(在
.Net
图书馆或其他地方)
- 如果这是正确的处理方法
如果我需要“自己动手”,我将不胜感激一些指导(即代码片段)来帮助我开始。
[Edit]
建议的用法:我打算主要使用这种数据类型来序列化我的库中的对象(这样我可以在消息包等中发送它们),而且,我可以将它们用作一种数据字典,允许我存储以下数据:任意的复杂性。
我不确定我的理解是否正确,但是是什么阻止了你创建一个DataColumn
with DataTable
因为它的类型?
像下面这样:
DataTable myTableOfTables = new DataTable("TableOfTables);
myTableOfTables.Columns.Add(new DataColumn("Table", typeof(DataTable)));
现在您可以继续执行以下操作:
myTableOfTables.Rows.Add(myTableOfTables.NewRow()[0] = new DataTable("NestedTable"));
如果您在立即窗口中查看,那就足够了:
? myTableOfTables.Rows[0][0]
你会得到:
{NestedTable}
base {System.ComponentModel.MarshalByValueComponent}: {NestedTable}
CaseSensitive: false
ChildRelations: {System.Data.DataRelationCollection.DataTableRelationCollection}
Columns: {System.Data.DataColumnCollection}
Constraints: {System.Data.ConstraintCollection}
DataSet: null
DefaultView: {System.Data.DataView}
DisplayExpression: ""
ExtendedProperties: Count = 0
HasErrors: false
IsInitialized: true
Locale: {es-ES}
MinimumCapacity: 50
Namespace: ""
ParentRelations: {System.Data.DataRelationCollection.DataTableRelationCollection}
Prefix: ""
PrimaryKey: {System.Data.DataColumn[0]}
RemotingFormat: Xml
Rows: {System.Data.DataRowCollection}
Site: null
TableName: "NestedTable"
所以你已经有了一个允许这种结构的类:DataTable
如果你想要的是一个DataColumn
它能够包含任何价值,无论是int
, a string
或者你有什么,然后简单地将其类型定义为object
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)