LINQ:转换IEnumable <双>到IEnumable <字符串>使用辅助方法

Osi*_*ris 5 c# linq

我有一个IEnumerable <双>我要转换为一个IEnumerable <字符串>. 问题是下面的代码在select语句上抛出一个参数null异常. 我究竟做错了什么?

当我尝试迭代返回的IEnumerable <string>时,会发生实际问题.我得到一个InvalidCastException.我在debuger中看到strings = {System.Linq.Enumerable.WhereSelectEnumerableIterator <double,string>}

  private IEnumerable<string> ConvertToString(IEnumerable<double> doubles)
  {
     IEnumerable<string> strings = null;

     if (doubles != null)
        strings = doubles.Select(d => ConvertToString(d));

     return strings;
  }


  private string ConvertToString(double d)
  {
     return string.Format("{0:0.00}", d);
  }
Run Code Online (Sandbox Code Playgroud)

好的,我解决了我的问题.这个Linq延迟执行使调试变得棘手.我实际上有一个呼叫上游导致问题.

ICollection<float> floats; //pretend it holds valid data
ConvertToString(floats.Cast<double>()) //<---This is naughty
Run Code Online (Sandbox Code Playgroud)

Mat*_*len 6

我已经尝试过你的代码而且我没有收到错误.

这意味着您将null传递给IEnumerable<double>您的方法.

Ps你可以缩短你的方法:

private IEnumerable<string> ConvertToString(IEnumerable<double> doubles)
{
   return doubles.Select(ConvertToString);
}
Run Code Online (Sandbox Code Playgroud)