错误的转换行

时间:2019-03-06 13:29:30

标签: c# type-conversion except

我有一个2D的list列表,我正在将其中的一些转换为双打。这在我的PC上可以正常使用,但由于某些原因而使用其他十进制分隔符时失败

try
        {
            foreach (var line in data)
            {
                if (line[25] != "")
                {
                    double market_size = Convert.ToDouble(line[25].Replace(",", "."));

                    if (line[59] != "") Players.Add(new string[] { line[1], line[0], Proper_Name(line[58]), (Convert.ToDouble(line[59].Replace(",", ".")) * market_size).ToString(), market_size.ToString() });
                    else Players.Add(new string[] { line[1], line[0], "No player", "0", market_size.ToString() });
                    if (line[61] != "") Players.Add(new string[] { line[1], line[0], Proper_Name(line[60]), (Convert.ToDouble(line[61].Replace(",", ".")) * market_size).ToString(), market_size.ToString() });
                    else Players.Add(new string[] { line[1], line[0], "No player", "0", market_size.ToString() });
                    if (line[63] != "") Players.Add(new string[] { line[1], line[0], Proper_Name(line[62]), (Convert.ToDouble(line[63].Replace(",", ".")) * market_size).ToString(), market_size.ToString() });
                    else Players.Add(new string[] { line[1], line[0], "No player", "0", market_size.ToString() });
                    if (line[65] != "") Players.Add(new string[] { line[1], line[0], Proper_Name(line[64]), (Convert.ToDouble(line[65].Replace(",", ".")) * market_size).ToString(), market_size.ToString() });
                    else Players.Add(new string[] { line[1], line[0], "No player", "0", market_size.ToString() });
                    if (line[67] != "") Players.Add(new string[] { line[1], line[0], Proper_Name(line[66]), (Convert.ToDouble(line[67].Replace(",", ".")) * market_size).ToString(), market_size.ToString() });
                    else Players.Add(new string[] { line[1], line[0], "No player", "0", market_size.ToString() });
                }
            }
        }
        catch (Exception except)
        {
            MessageBox.Show("Conversion error:" + Environment.NewLine + Environment.NewLine + except.ToString());
            this.Close();
        }

首先,我认为即使使用逗号而不是圆点也可以,但这不是我的主要问题。就是说,当我得到一个异常错误时,它表明454行是foreach循环开始的地方。 我无法显示该错误消息,因为它是捷克语,但它基本上指出这是第454行的转换错误。

2 个答案:

答案 0 :(得分:0)

问题确实出在小数点分隔符上。您的代码假设使用了一个点,但这并不总是正确的。

您可以尝试将字符串转换为选定的分隔符,无论它是什么,都是这样的:

internal static string ReplaceWithDecimalSep(string input)
    {
        string firstReplace = input.Replace('.', (char)swUserPreferenceStringValue_e.swSeparatorCharacterForDims);
        string secondReplace = firstReplace.Replace(',', (char)swUserPreferenceStringValue_e.swSeparatorCharacterForDims);

        return secondReplace;
    }

然后可以使用类似于以下内容的方式将其安全地转换为double:

internal static double ToLocalCultureDouble(string input)
    {
        string toConvert = ReplaceWithDecimalSep(input);

        double.TryParse(toConvert, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out double result);

        return result;
    }

答案 1 :(得分:0)

是否要在字符串列表中添加一行(例如List<string>)?哪条线是454?

只要转换不起作用,Convert类就会引发异常。您可以尝试使用double.TryParse(),它返回true或false。如果您喜欢转换,请尝试Convert.ToDouble(value, System.Globalization.CultureInfo.InvariantCulture),如果您已将“,”转换为“”,则该方法在任何文化中均适用。首先。