Измените цикл for с помощью лямбды (C # 3.0) - PullRequest
1 голос
/ 12 мая 2010

Можно ли сделать то же самое, используя 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;
}

Я хочу сказать, чтобы переписать утверждение, используя лямбду. Я пробовал с

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 ]

7 голосов
/ 12 мая 2010

Ну, вы можете сделать это проще с помощью инициализаторов объектов, чтобы начать с:

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

Я бы, вероятно, оставил это, хотя ... в настоящее время нет 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();

Если options.Attributes равен , на самом деле , это просто свойство, которое возвращает тип с индексатором, которое не будет работать.

0 голосов
/ 12 мая 2010
Enumerable.Range(0, objEntityCode.Count - 1).ToList().ForEach(i => 
                {
                    options.Attributes[i] = new EntityCodeKey
                    {
                         EntityCode = objEntityCode[i].EntityCodes
                         , OrganizationCode = Constants.ORGANIZATION_CODE  
                    }; 

                }
             );
0 голосов
/ 12 мая 2010
Enumerable.Range(0, objEntityCode.Count - 1).ToList().ForEach(i => 
                {
                    options.Attributes[i] = new EntityCodeKey(); 
                    options.Attributes[i].EntityCode = objEntityCode[i].EntityCodes;
                    }
                );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...