我想将列表中的字符串值转换为double。所以我使用以下代码
List<double> valList = new List<double>();
valList = aList.Select(x => double.TryParse(x.aDoubleValue_inString, out x)? x: 0).ToList();
出于某种原因,它不起作用,显示我对double.TryParse的使用错误!
任何想法?
答案 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());