更改与拉姆达循环(C#3.0)

问题描述:

是否有可能使用lambda更改与拉姆达循环(C#3.0)

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

+2

做_what_使用Lambda? – 2010-05-12 03:07:34

+0

我的意思是说使用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; });但不起作用 – Newbie 2010-05-12 03:09:49

+1

为什么你想用lambdas来做它?如果你的结构依赖于索引,那么它不适用于List.ForEach()结构和FWIW,循环是编程语言的核心部分......它如何通过*而不是*使用它们来改进你的程序? – jeffora 2010-05-12 03:12:34

那么你可以把它与对象初始化简单,入手:

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实际上只是它会返回一个索引,这是行不通的一个类型的属性。

+0

爵士,什么是在下面 Enumerable.Range wrng(0,objEntityCode.Count - 1)。选择(I => {options.Attributes [I] =新EntityCodeKey {EntityCode = objEntityCode [I] .EntityCodes ,OrganizationCode = Constants.ORGANIZATION_CODE}; })。ToArray(); 投掷错误 无法从用法推断方法“System.Linq.Enumerable.Select (System.Collections.Generic.IEnumerable ,System.Func )'的类型参数。尝试明确指定类型参数。 – Newbie 2010-05-12 03:23:23

+0

您的lambda表达式不会返回任何内容。这只是一个声明。这对选择投影并没有什么帮助......另一个与它“错误”的事情是它无缘无故地引入了一堆东西。 LINQ旨在使代码更简单*,而不是更复杂。 – 2010-05-12 03:26:38

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

我会在你的问题上添加同样的评论:你为什么要这样做?如何比明确编写循环更好? – jeffora 2010-05-12 03:14:53

+0

先生,我正在学习LINQ和LAMBDA ....今后我会尝试写这些语句。 :) – Newbie 2010-05-12 03:24:40

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

       } 
      );