gpt4 book ai didi

c# - 将对象转换为 DataColumn 类型

转载 作者:太空宇宙 更新时间:2023-11-03 13:56:29 25 4
gpt4 key购买 nike

我正在大量使用字典来解耦一些(高度耦合的)代码。以下是与我的问题相关的内容:

//Output table
System.Data.DataTable dtOutput = new System.Data.DataTable();
dtOutput.Columns.Add("Ticket", typeof(string));
dtOutput.Columns.Add("Transit", typeof(string));
dtOutput.Columns.Add("City", typeof(string));
dtOutput.Columns.Add("Province", typeof(string));
dtOutput.Columns.Add("Outage Start Time", typeof(DateTime));
dtOutput.Columns.Add("Outage End Time", typeof(DateTime));
dtOutput.Columns.Add("Priority", typeof(string));
dtOutput.Columns.Add("Business Impact", typeof(TimeSpan));
dtOutput.Columns.Add("Time To Repair (mins)", typeof(Double));
dtOutput.Columns.Add("Summary", typeof(string));

Dictionary<string, int> outputColumnsLegend = new Dictionary<string, int>();
foreach (DataColumn col in dtOutput.Columns)
{
outputColumnsLegend.Add(col.ColumnName, dtOutput.Columns.IndexOf(col) + 1);
}

Dictionary<string, Variable> outputVariable = new Dictionary<string, Variable>()
{
{"Ticket", new Variable()},
{"Transit", new Variable()},
{"City", new Variable()},
{"Province", new Variable()},
{"Outage Start Time", new Variable()},
{"Outage End Time", new Variable()},
{"Priority", new Variable()},
{"Business Impact", new Variable()},
{"Time To Repair (mins)", new Variable()},
{"Summary", new Variable()}
};

变量就是:

public class Variable
{
public object Value { get; set; }
}

现在,要创建我尝试使用的输出表:

DataRow dataRow = dtOutput.NewRow();
foreach (DataColumn col in dtOutput.Columns)
{
dataRow[outputColumnsLegend[col.ColumnName]] = (col.DataType)outputVariable[col.ColumnName].Value;
}

但是,在 col.DataType 中引用 col 会导致此错误:

The type or namespace 'col' could not be found (are you missing a using directive or an assembly reference?)

我不确定为什么会抛出此错误或如何修复它。另外,我不确定 col.DataType 是否应该改为 col.GetType(假设这可以工作)。

如有任何建议,我们将不胜感激。

问候。

最佳答案

此代码没有最终结果。因为 DataTable 将数据存储为对象(这就是为什么在从中获取数据时必须进行强制转换的原因)并且由于您的 Variable() 类包含一个对象,因此实际上进行任何强制转换都不会做任何有用的工作。

基本上,您要拆箱然后立即在同一行上重新装箱数据,即使强制转换已生效。

如果你想在运行时保留类型以避免这种情况(这似乎是你可能想要做的),那么你需要使你的变量类成为通用类,如下所示:

public class Variable<T>
{
public T Value {get; set;}
}

然后您将实例化特定类型的变量,例如:

Variable<int> someInt;
Variable<string> someString;
etc.

但是,即使您这样做,您仍然会在将它放入 DataTable 的那一刻将其作为一个对象装回,因此这是徒劳的。

关于c# - 将对象转换为 DataColumn 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12015188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com