将字符串从列表转换为双列表的最短方法

本文关键字:列表 方法 字符串 转换 | 更新日期: 2023-09-27 17:53:36

我想将字符串值从列表转换为双精度。所以我使用下面的代码

List<double> valList = new List<double>();
valList = aList.Select(x => double.TryParse(x.aDoubleValue_inString, out x)? x: 0).ToList();

由于某些原因,它不工作,显示我使用double.TryParse错误!

任何想法?

将字符串从列表转换为双列表的最短方法

您要查找的内容如下:

valList = aList.Select(x=> 
           { 
              double temp; 
              return double.TryParse(x.aDoubleValue_inString, out temp)? temp: 0;
           }).ToList();

您可以使用类似的查询表达式:

double temp = 0;
valList = (from x in aList
           where double.TryParse(x.aDoubleValue_inString, out temp)
           select temp).ToList();

如果你的属性x.aDoubleValue_inString是一个双值,你不需要double.TryParse,那么你可以这样做:

valList = aList.Select(x=> double.Parse(x.aDoubleValue_inString))
               .ToList();

看起来你想做双倍。将输出解析回字符串列表变量。试一试:

List<double> valList = new List<double>();
double y;
valList = aList.Select(x => double.TryParse(x.aDoubleValue_inString, out y)? y: 0).ToList();

你的out没有多大意义。如此:

var aList = new List<string> { "1.2", "2" };
List<double> valList = new List<double>();
double temp;
valList = aList.Select(x => double.TryParse(x, out temp) ? temp : 0).ToList();

如果不在Linq本身之外为out参数声明一个变量,那么在Linq中使用out参数的方法就不那么容易了。

然而,我注意到您似乎想要用零替换失败的解析,在这种情况下,您可以编写一个小的辅助方法,如下所示:

static double ParseOrZero(string input)
{
    double result;
    double.TryParse(input, out result);
    return result;
}

然后你可以这样做:

var valList = aList.Select(ParseOrZero).ToList();

用一个很好的扩展方法包装它

public static class StrExt
{
    public static double ToDouble(this string str)
    {
        double val;
        return Double.TryParse(str, out val) ? val : default(Double);
    }
}
...
valList = aList.Select(x => x.aDoubleValue_inString.ToDouble());