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

时间:2010-05-12 03:06:30

标签: 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;
}

我的意思是说使用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; }
);

但没有工作 我正在使用C#3.0

3 个答案:

答案 0 :(得分:7)

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

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

我可能会把它留在那里虽然... ForEach上目前没有IEnumerable<T>扩展方法 - 而且good reasons,但我知道这不是普遍持有的意见;)

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

如果options.Attributes = objEntityCode.Select(code => new EntityCodeKey { EntityCode = code.EntityCodes, OrganizationCode = Constants.ORGANIZATION_CODE }).ToArray(); 是可写属性(例如数组),则可以使用:

options.Attributes

如果{{1}} 实际只是一个返回带索引器的类型的属性,那将无效。

答案 1 :(得分:0)

Enumerable.Range(0, objEntityCode.Count - 1).ToList().ForEach(i => 
                {
                    options.Attributes[i] = new EntityCodeKey(); 
                    options.Attributes[i].EntityCode = objEntityCode[i].EntityCodes;
                    }
                );

答案 2 :(得分:0)

Enumerable.Range(0, objEntityCode.Count - 1).ToList().ForEach(i => 
                {
                    options.Attributes[i] = new EntityCodeKey
                    {
                         EntityCode = objEntityCode[i].EntityCodes
                         , OrganizationCode = Constants.ORGANIZATION_CODE  
                    }; 

                }
             );