C# 如何将此代码更改为linq样式
你能帮我把这段代码做得更像Linq风格吗。 我只是想在这里学到一些新东西C# 如何将此代码更改为linq样式,c#,linq,lambda,C#,Linq,Lambda,你能帮我把这段代码做得更像Linq风格吗。 我只是想在这里学到一些新东西 IList<object[]> argsPerCallforserialization = new List<object[]>(); foreach (var argument in argsPerCall) { object[] temp = new object[6]; temp[
IList<object[]> argsPerCallforserialization = new List<object[]>();
foreach (var argument in argsPerCall)
{
object[] temp = new object[6];
temp[0] = argument[0];
temp[1] = argument[1];
temp[2] = argument[2];
temp[3] = ((McPosition)argument[3]).Station;
temp[4] = ((McPosition)argument[3]).Slot;
temp[5] = ((McPosition)argument[3]).Subslot;
argsPerCallforserialization.Add(temp);
}
IList argsPerCallforserialization=new List();
foreach(argsPerCall中的var参数)
{
对象[]临时=新对象[6];
temp[0]=参数[0];
temp[1]=参数[1];
temp[2]=参数[2];
temp[3]=((McPosition)参数[3])站;
temp[4]=((McPosition)参数[3])插槽;
temp[5]=((McPosition)参数[3])子批次;
argsPerCallforserialization.Add(temp);
}
谢谢。听起来像:
var argsPerCallforserialization = argsPerCall.Select
(argument => new object[] { argument[0],
argument[1],
argument[2],
((McPosition)argument[3]).Station,
((McPosition)argument[3]).Slot,
((McPosition)argument[3]).Subslot })
.ToList();
不能说它听起来像是工作中最好的API,但是嘿…听起来像:
var argsPerCallforserialization = argsPerCall.Select
(argument => new object[] { argument[0],
argument[1],
argument[2],
((McPosition)argument[3]).Station,
((McPosition)argument[3]).Slot,
((McPosition)argument[3]).Subslot })
.ToList();
不能说它听起来像是这项工作中最好的API,但是嘿…不要再猜测Jon Skeet了,但我认为在这种情况下,查询语法有一个优势:
var query =
from argument in argsPerCall
let mcp = (McPosition) argument[3]
select new object[]
{
argument[0],
argument[1],
argument[2],
mcp.Station,
mcp.Slot,
mcp.Subslot
};
var argsPerCallforserialization = query.ToList();
不是猜测Jon Skeet,但我认为在这种情况下,查询语法有一个优势:
var query =
from argument in argsPerCall
let mcp = (McPosition) argument[3]
select new object[]
{
argument[0],
argument[1],
argument[2],
mcp.Station,
mcp.Slot,
mcp.Subslot
};
var argsPerCallforserialization = query.ToList();
您可以隐藏函数中的所有复杂性,以使其更具可读性,如:
Func<object[], object[]> extractArgs = x =>
{
var mc = (McPosition)x[3];
return new object[]
{
x[0], x[1], x[2],
mc.Station, mc.Slot, mc.SubSlot
};
};
您可以隐藏函数中的所有复杂性,以使其更具可读性,如:
Func<object[], object[]> extractArgs = x =>
{
var mc = (McPosition)x[3];
return new object[]
{
x[0], x[1], x[2],
mc.Station, mc.Slot, mc.SubSlot
};
};
你真的有位置吗?那太棒了。你为什么要把它转换成林肯?弗雷奇的表现比林克好object@Massimiliano:你可能已经搞定了:性能不是问题(还有,“只是想在这里学习新东西”),你真的有一个McPosition吗?那太棒了。你为什么要把它转换成林肯?弗雷奇的表现比林克好object@Massimiliano:你可能已经搞定了:性能不是问题(还有,“只是想在这里学到新东西”-)