我有一个来自json反序列化器的ArrayList。这个数组应该只包含数字,但是和往常一样,坏事可能发生,我希望避免处理异常。这就是我所拥有的:

var TheListOfLongs = (from object s in TheArrayList
                      select Convert.ToInt64(s)).ToList<long>();


只要TheArrayList仅包含数字,此方法就可以正常工作。如何将Convert.ToInt64语句更改为TryParse

谢谢。

最佳答案

long outValue;
//will work, but double conversion
var result = TheArrayList.Cast<object>()
            .Where(m => Int64.TryParse(m.ToString(), out outValue))
            .Select(m => Convert.ToInt64(m)).ToList();

//should avoid double Parse, but untested, see Daniel Hilgarth's answer and warnings.
var result = TheArrayList.Cast<object>()
            .Where(m => Int64.TryParse(m.ToString(), out outValue))
            .Select(m => outValue).ToList();


或良好的foreach,这可能是最佳选择。

var list = new List<long>();
long outValue;
foreach (object value in the ArayList) {
   if (Int64.TryParse(value.ToString(), out outValue))
      list.Add(outValue);
}

关于c# - linq从ArrayList解析整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14730214/

10-12 12:49