使用lambda更改for循环(C#3.0)

New*_*bie 1 c#-3.0

是否可以使用Lambda进行相同的操作

for (int i = 0; i < objEntityCode.Count; i++)
{
    options.Attributes[i] = new EntityCodeKey();
    options.Attributes[i].EntityCode = objEntityCode[i].EntityCodes;
    options.Attributes[i].OrganizationCode = Constants.ORGANIZATION_CODE;
}
Run Code Online (Sandbox Code Playgroud)

我的意思是说使用lambda重写语句.我试过了

Enumerable.Range(0,objEntityCode.Count-1).Foreach(i=> { 
    options.Attributes[i] = new EntityCodeKey(); 
    options.Attributes[i].EntityCode = objEntityCode[i].EntityCodes; 
    options.Attributes[i].OrganizationCode = Constants.ORGANIZATION_CODE; }
);
Run Code Online (Sandbox Code Playgroud)

但不工作我正在使用C#3.0

Jon*_*eet 7

那么你可以使用对象初始化器更简单,首先:

for (int i = 0; i < objEntityCode.Count; i++)
{
    options.Attributes[i] = new EntityCodeKey
    {
        EntityCode = objEntityCode[i].EntityCodes,
        OrganizationCode = Constants.ORGANIZATION_CODE
    };
}
Run Code Online (Sandbox Code Playgroud)

我可能会留下它虽然...目前没有ForEach扩展方法IEnumerable<T>- 并且有充分的理由,虽然我知道它不是普遍持有的意见;)

在这种情况下,你仍然需要知道i为了设置options.Attributes[i]- 除非你可以options.Attributes一次性设置整个,当然......在不知道所涉及的类型的情况下,很难进一步提出建议.

如果options.Attributes是可写属性(例如数组),您可以使用:

options.Attributes = objEntityCode.Select(code => new EntityCodeKey
    {
        EntityCode = code.EntityCodes,
        OrganizationCode = Constants.ORGANIZATION_CODE
    }).ToArray();
Run Code Online (Sandbox Code Playgroud)

如果options.Attributes实际上只是它返回一个类型与索引的属性,这是行不通的.