2014-03-25 38 views
-3

我想將列表中的字符串值轉換爲double。因此,我正在使用以下代碼將字符串從列表轉換爲雙列表的最短途徑

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

由於某種原因,它不能正常工作,顯示我使用double.TryParse時出錯!

有什麼想法嗎?

+1

,什麼是你看到的錯誤? – Servy

+0

x是您的對象,它有一些名爲aDoubleValue_inString的屬性。它也不能成爲TryParse的輸出參數。這沒有任何意義。 – jrwren

回答

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

@Downvoter,關心評論? – Habib

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