我可以使用LINQ做得更好吗?

时间:2009-12-20 11:55:11

标签: c# linq

List<byte[]> data = new List<string>(File.ReadAllLines(Filename)).ConvertAll<byte[]>(delegate(string value)
    {
        return new List<string>(value.Split('.')).ConvertAll<byte>(delegate(string byteVal)
        {
            return Convert.ToByte(byteVal);
        }).ToArray();
    });

2 个答案:

答案 0 :(得分:2)

扩展方法通常比等效的LINQ更简洁:

File.ReadAllLines(Filename).Select(
    line => line.Split('.').Select(ch => Convert.ToByte(ch)).ToArray()
    ).ToArray();

在LINQ中,这将是:

(from line in File.ReadAllLines(Filename)
 select (
     from ch in line.Split('.')
     select Convert.ToByte(ch)
     ).ToArray()
).ToArray()

我没有VS在我面前,所以我希望这不是太远了。两个版本当然都需要VS9(2008)。

答案 1 :(得分:1)

好吧,我通常会一次消耗输入一行(以允许处理大文件):

static IEnumerable<string> ReadLines(string path) {
    using (var file = File.OpenText(path)) {
        string line;
        while ((line = file.ReadLine()) != null) {
            yield return line;
        }
    }
}

然后使用:

var qry =  from line in ReadLines(Filename)
           select Array.ConvertAll<string,byte>(line.Split('.'), Convert.ToByte);

如果您需要列表(而不是序列);

var list = qry.ToList();