最后开始学习LINQ。我想将字符串转换为对象。我知道还有其他方法,但我想看看如何使用LINQ完成它。这是我提出的最佳方式:
using System;
using System.Linq;
public class Program
{
public static void Main()
{
string [] lines = new string[2];
lines[0] = "John, 12345, true";
lines[1] = "Miles, 45678, true";
var o = from x in lines
select new {
name = x.Split(',')[0],
zip = Int32.Parse(x.Split(',')[1]),
status = bool.Parse(x.Split(',')[2])
};
foreach (var p in o) {
Console.WriteLine(p.name + " - " + p.zip + ", - " + p.status);
}
}
}
我的问题是:如果不使用所有Split()
s,有没有更好的方法?这是一个小提琴:http://dotnetfiddle.net/RSY48R。
答案 0 :(得分:2)
var query = lines.Select(r => r.Split(','))
.Select(t => new
{
name = t[0],
zip = int.Parse(t[1]),
status = bool.Parse(t[2])
});
foreach (var p in query)
{
Console.WriteLine(p.name + " - " + p.zip + ", - " + p.status);
}
你会得到:
John - 12345, - True
Miles - 45678, - True
答案 1 :(得分:1)
using System;
using System.Linq;
public class Program
{
public static void Main()
{
string [] lines = new string[2];
lines[0] = "John, 12345, true";
lines[1] = "Miles, 45678, true";
var o = from x in lines
let eachLine = x.Split(',')
select new {
name = eachLine[0],
zip = Int32.Parse(eachLine[1]),
status = bool.Parse(eachLine[2])
};
foreach (var p in o) {
Console.WriteLine(p.name + " - " + p.zip + ", - " + p.status);
}
}
}
我一直认为let
在这里总是更干净。我不认为除了split
之外还有一种更好的方法,对我来说没问题。
using System;
using System.Linq;
public class Program
{
public static void Main()
{
string [] lines = new string[2];
lines[0] = "John, 12345, true";
lines[1] = "Miles, 45678, true";
var o = from line in
(
from inner in lines
select inner.Split(',')
)
select new {
name = line[0],
zip = Int32.Parse(line[1]),
status = bool.Parse(line[2])
};
foreach (var p in o) {
Console.WriteLine(p.name + " - " + p.zip + ", - " + p.status);
}
}
}
另一种方法是使用内部选择@Habib在下面显示“流畅”的方式,这是查询版本,我认为这样可以更容易地看到wat正在进行。< / p>
享受您的LINQ之旅!
如果你能得到Jon Skeet 'C# In Depth'的副本,那么关于LINQ的部分绝对是精彩的。正如本书的其余部分一样。