Could you please help me make this code more in Linq style. I just trying to learn a new things here.
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);
}
Thanks .
Sounds like:
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();
Can't say it sounds like the nicest API in the work, but hey...
Not to second guess Jon Skeet, but I'd think in this case the query syntax has an edge:
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();
You could hide all the complexity in a function, in order to make it more readable - like:
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
};
};
And then use it like:
var result = argsPerCall.Select(extractArgs);
精彩评论