gpt4 book ai didi

c# - 是否有将对象转换为小数的单行方法?

转载 作者:太空狗 更新时间:2023-10-29 21:09:37 25 4
gpt4 key购买 nike

是否有单行方式将对象转换为 decimal? 数据类型?

我的代码看起来像这样:

foreach(DataRow row in dt.Rows)
{
var a = new ClassA()
{
PropertyA = row["ValueA"] as decimal?,
PropertyB = row["ValueB"] as decimal?,
PropertyC = row["ValueC"] as decimal?
};

// Do something

}

然而,将对象转换为 decimal? 并没有按我预期的方式工作,并且每次都返回 null。

数据行是从 Excel 文件中读取的,因此每行中对象的数据类型要么是 double(如果有值),要么是 null string 如果留空。

suggested method执行此转换是使用 decimal.TryParse,但是我不想为类中的每个小数属性创建一个临时变量(我的实际类中有大约 7 个属性是小数,而不是3).

decimal tmpvalue;
decimal? result = decimal.TryParse((string)value, out tmpvalue) ?
tmpvalue : (decimal?)null;

有没有办法可以在一行中将潜在的 null 值转换为 decimal?

我试过贴出的答案 here ,但是它似乎没有工作,并且也给了我一个 null 值,因为 row["ValueA"] as string 返回 null .

最佳答案

最好的办法是创建一个扩展方法。这是我使用的,尽管您可以调整它以返回 decimal?

public static class ObjectExtensions
{
public static decimal ToDecimal(this object number)
{
decimal value;
if (number == null) return 0;
if (decimal.TryParse(number.ToString().Replace("$", "").Replace(",", ""), out value))
return value;
else
return 0;
}
public static decimal? ToNullableDecimal(this object number)
{
decimal value;
if (number == null) return null;
if (decimal.TryParse(number.ToString().Replace("$", "").Replace(",", ""), out value))
return value;
else
return null;
}

}

然后您可以通过在任何对象上调用 .ToDecimal() 来使用它,就像调用 .ToString() 一样。

它不是一行,而是在它被使用的地方只是一个单一的函数调用,而且它是非常可重用的。

编辑以添加可为 null 的版本

关于c# - 是否有将对象转换为小数的单行方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14126473/

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