是否可以使用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
答案 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
};
}
);