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

时间:2014-03-25 13:54:54

标签: c# list

我想将列表中的字符串值转换为double。所以我使用以下代码

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

出于某种原因,它不起作用,显示我对double.TryParse的使用错误!

任何想法?

5 个答案:

答案 0 :(得分:2)

您正在寻找类似的内容:

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

您可以使用query expression执行类似的操作:

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();

答案 1 :(得分:1)

看起来你正在尝试将double.TryParse输出回你的字符串列表变量。尝试:

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

答案 2 :(得分:0)

您的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();

答案 3 :(得分:0)

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

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

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

然后你可以这样做:

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

答案 4 :(得分:0)

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

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());