C# 如何将字符串(屏蔽)转换为十进制?

C# 如何将字符串(屏蔽)转换为十进制?,c#,type-conversion,maskedtextbox,C#,Type Conversion,Maskedtextbox,我在文本框“99:99”中有掩码,我需要转换为十进制。 示例:字符串“12:34”转换为12.34 我创建方法: private decimal ConvertStringMaskToDecimal(string strMask) { var split = strMask.Split(':'); if(split.Length==2) { decimal returnValue = decimal.Parse(split[0]) + decimal.Pa

我在文本框“99:99”中有掩码,我需要转换为十进制。 示例:字符串“12:34”转换为12.34

我创建方法:

private decimal ConvertStringMaskToDecimal(string strMask)
{
    var split = strMask.Split(':');
    if(split.Length==2)
    {
        decimal returnValue = decimal.Parse(split[0]) + decimal.Parse(split[1])/100;
        return returnValue;
    }
    else
    {
        throw new ArgumentException("strMask not valid");
    }
}

此代码已运行,但我认为代码不正确,如何解决此问题

只需在解析之前将
替换为

decimal.Parse(strMask.Replace(':', '.'), CultureInfo.InvariantCulture)

注意使用
CultureInfo.InvariantCulture
以确保
的解释正确。

您可以使用
十进制。在将冒号
替换为小数点
后解析

decimal.Parse(strMask.Replace(':', '.'), CultureInfo.InvariantCulture)

正如我在对Oded答案的评论中所说:不建议将点硬编码为十进制分隔符

解释了原因

我建议:

using System.Globalization;

// (...)
decimal.Parse(strMask.Replace(":", CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator));
相反

或者,正如亨克·霍特曼所说:

decimal.Parse(strMask.Replace(':', '.'), CultureInfo.InvariantCulture);

同样的效果(在非美国机器上不会崩溃)。

将点硬编码为十进制分隔符不是一个好做法@康拉德·莫拉夫斯基,这是怎么做到的?最好使用:
decimal.Parse(…,CultureInfo.InvariantCulture)
@HenkHolterman你说得对。我相应地更新了我的答案。