Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将此代码更改为linq样式_C#_Linq_Lambda - Fatal编程技术网

C# 如何将此代码更改为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[

你能帮我把这段代码做得更像Linq风格吗。 我只是想在这里学到一些新东西

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:你可能已经搞定了:性能不是问题(还有,“只是想在这里学到新东西”-)