【发布时间】:2012-12-19 04:47:09
【问题描述】:
目标
对string 进行排序,该string 在一组数据中以数字形式显示类似$1,995.94 的货币数据。
代码
我目前正在使用下面的代码示例将string 值转换为decimal,以便我可以对其进行正确排序。
if (sortBy == "checkAmount")
{
StringBuilder sb = new StringBuilder();
foreach (var c in Convert.ToString(p.GetType().GetProperty(sortBy).GetValue(p, null)))
{
if (!char.IsDigit(c) && c != '.') { continue; }
sb.Append(c);
}
return Convert.ToDecimal(sb.ToString());
}
else
{
return p.GetType().GetProperty(sortBy).GetValue(p, null);
}
问题
有什么更好的方法来做到这一点?它有效,这很酷,但它不是很优雅。
最终解决方案
answer provided by Servy 按预期工作,我使用该实现有一段时间了,但我和一位同事找到了更好的方法,所以我在这里记录它。 顺便说一句,我最终还是使用了这个解决方案。
decimal.Parse(input, NumberStyles.AllowCurrencySymbol | NumberStyles.Number);
【问题讨论】:
-
首先,将字符串解析从业务逻辑中分离出来。有一个方法
ParseString接受string并返回decimal而不是将它与一堆逻辑混合以获取要解析的字符串。接下来,您可以使用正则表达式,例如^[\d.]+(未经测试)而不是循环。 -
哦,既然你有“工作”代码,这可能应该在代码审查中,而不是 SO。
-
@Servy,我正在研究那个正则表达式。
-
@Servy,我得到了这个工作
[-\d.]+,但是-会引起问题吗?我只是想确保我得到负数。我意识到我错过了当前算法中的那些。 -
@Servy,请查看我的更新。我将您的答案保留为已接受的答案,但我和一位同事找到了更好的方法。看看吧。
标签: c# .net type-conversion