gpt4 book ai didi

c# - 格式为字符串的 ItemArray 无效

转载 作者:行者123 更新时间:2023-11-30 20:37:54 26 4
gpt4 key购买 nike

我有一个 DataTable,其中有几个 DataRow,我想在新的 DataTable 中进行格式化,但我在尝试时发现了一个问题格式化一些行:

DataTable ret = functionThatGetsaDataTableUsingSQL(); //Original DataTable
DataTable dt = new DataTable(); //Final DataTable
foreach (DataRow dr in ret.Rows)
{
DataRow row = dt.Rows.Add();
for (int j = 0; j < dr.ItemArray.Length; j++)
{
if (j == 14) row[j] = dr.ItemArray[j].ToString("C2");
else row[j] = dr.ItemArray[j];
}
}

row[j] = dr.ItemArray[j].ToString("C2"); 不起作用说 No overload for method 'ToString' takes 1 arguments

我尽量简化代码,以便只关注格式化部分。

如何格式化这个值?我知道我可以在使用 ToString("C2") 之前转换 Convert.ToDecimal() 但这是唯一的方法吗?

最佳答案

ItemArray 是一个对象[]Object.ToString 没有参数。我想这实际上是一种货币值(value)。然后使用 DataRow.Field 扩展方法对其进行转换:

foreach (DataRow dr in ret.Rows)
{
DataRow row = dt.Rows.Add();
for (int j = 0; j < dr.ItemArray.Length; j++)
{
if (j == 14)
row[j] = dr.Field<decimal>(j).ToString("C2"); // use the correct type
else
row[j] = dr.ItemArray[j];
}
}

这是一个优化版本,ItemArray-property有额外的开销,因为 getter 总是创建一个新数组(如您所见 here ):

foreach (DataRow dr in ret.Rows)
{
DataRow row = dt.Rows.Add();
foreach(DataColumn col in ret.Columns)
{
if (col.Ordinal == 14)
row.SetField(col.Ordinal, dr.Field<decimal>(col).ToString("C2")); // use the correct type
else
row.SetField(col.Ordinal, dr[col]);
}
}

关于c# - 格式为字符串的 ItemArray 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35648950/

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