C# 如果值为null或为空,则转换为double失败

C# 如果值为null或为空,则转换为double失败,c#,C#,我编写了一个方法,将字符串转换为double,下面是代码 public double convertToDouble(string number) { string temp = number; if (number.Contains("x")) { int locationE = number.IndexOf("x"); string exponent = number.Substring(locationE + 5, number.Le

我编写了一个方法,将字符串转换为double,下面是代码

public double convertToDouble(string number)
{
    string temp = number;
    if (number.Contains("x"))
    {
        int locationE = number.IndexOf("x");
        string exponent = number.Substring(locationE + 5, number.Length - (locationE + 5));
        temp = number.Substring(0, locationE - 1) + "E" + exponent;
    }

    return Convert.ToDouble(temp);
}

但是如果temp变量作为null或空字符串传入,转换将失败。如何编写此部分。

为什么要为此编写一个新方法,而可以使用最安全的方法,
double.TryParse

double number;

// The numberStr is the string you want to parse
if(double.TryParse(numberStr, out number))
{
    // The parsing succeeded.
}
如果您不喜欢上述方法,并且希望继续使用您的方法,那么我看到的唯一选项就是抛出异常

public double convertToDouble(string number)
{
    if(string.IsNullOrWhiteSpace(number))
    {
        throw new ArgumentException("The input cannot be null, empty string or consisted only of of white space characters", "number");
    }

    string temp = number;
    if (number.Contains("x"))
    {
        int locationE = number.IndexOf("x");
        string exponent = number.Substring(locationE + 5, number.Length - (locationE + 5));
        temp = number.Substring(0, locationE - 1) + "E" + exponent;
    }
    return Convert.ToDouble(temp);
}

取决于无法转换数字时希望发生什么

你可以试试这个:

public double convertToDouble(string number)
{
    string temp = number;
    if (number.Contains("x"))
    {
        int locationE = number.IndexOf("x");
        string exponent = number.Substring(locationE + 5, number.Length - (locationE + 5));
        temp = number.Substring(0, locationE - 1) + "E" + exponent;
    }
    double returnDouble;
    if(double.TryParse(temp, out returnDouble))
      return returnDouble;

    // Return whatever or throw an exception, etc.
    return 0;
}
作为进一步的提示,您似乎正在将类似于
[number]x10^[exponent]
的内容转换为
[number]E[exponent]
,如果是这样,可以很容易地转换为:

public double convertToDouble(string number)
{
    if(String.IsNullOrWhiteSpace(number)) 
       return 0; // or throw exception, or whatever

    // Instead of all those "IndexOf" and "Substrings"
    var temp = number.Replace("x 10^", "E");

    double returnDouble;
    if(double.TryParse(temp, out returnDouble))
      return returnDouble;

    // Return whatever or throw an exception, etc.
    return 0;
}

这可以在不影响可读性的情况下进一步美化,但我将把这留给您

使用string.IsNullOrEmpty测试并返回?这会导致:如果出现null或空字符串,您希望返回什么?首先测试变量是否为null或空字符串?正如其他人所说,您应该在转换之前测试字符串。此外,只有当您知道字符串是双精度格式时,才可以使用Convert.ToDouble。我会调查double.TryParse()@Downvoter你能找出上面答案中的错误,以便改正它吗。提前非常感谢:)我看不出答案有任何错误,因此+1进行补偿。当我写我的答案时,你抢先找到了答案,但是让我的答案吧,因为我也想在字符串替换部分提供提示:-)@Jcl非常感谢:)在我们的社区看到这一点很难过。我们都应该有一个从这个社区变得更好的计划。我看不出有任何合理的理由在不解释错误的情况下否决答案或问题。除此之外,当前的问题得到了-3分,三位投了反对票的人中没有任何人向OP解释什么错了,如果有错的话。我已经多次这样做了,所以我觉得你在那里。我希望downvoting需要一个评论,甚至是一个小评论:-)来替换字符串(+1)