이 질문에는 이미 답변이 있습니다.
나는 다음을 추가하려고 노력 중이다.SELECT ALL
기능을 사용하여 LINQ 내 눈금,하지만 컴파일 오류가 발생합니다.
List<Person_> PeopleUpdated = People.ToList().ForEach(a => a.SELECTED = true).ToList();
그것은 말한다 :
암시 적으로 'void'유형을 다음으로 변환 할 수 없습니다. 'System.Collections.Generic.List < LogoSapHrIntegration.frmXmlUpload.Person_> '
내가 뭘 잘못하고 있죠?
그만큼List<T>.ForEach
반환 값 (즉, void)이 없으므로 실행할 수 없습니다.ToList()
그 반대. (만나다MSDN)
ForEach
목록의 각 항목에 대한 특정 작업 (실제 작업for
고리).
귀하의 경우에는 모든 루프를 선택하는 간단한 for 루프가 가장 효율적입니다.
foreach (var person in People)
person.Selected = true
People
평야foreach
루프가 훨씬 간단하고 효율적입니다. - RangoPeopleUpdated
동시에 목록. OP는 이것이 한 - 라이너가되기를 바라고 있으며 그것이 될 수 있는지 확신 할 수 없습니다. - Jon Egertonforeach(var p in People) p.SELECTED = true;
? 제목에 따르면 OP는 원래 목록을 업데이트하려고하지만 새 목록을 만들어야하는 것은 아닙니다. - RangoSelected
사실로. - Yuval Itzchakov
List<T>.ForEach
보고void
(귀하의 경우 컬렉션이 제자리에서 컬렉션을 변경합니다).ForEach
걸린다Action<T>
목록의 각 항목에 대해 실행합니다.
우선, 정상을 사용할 수 있습니다.foreach
고리:
foreach (var person in people)
{
person.Selected = true;
}
어느 것이 가장 간단하고 깨끗합니다.
정말로 농구로 뛰어 가서 LINQ를 사용하려면ConvertAll
:
var list = new List<Person> { new Person(), new Person() };
var convertedPeople = list.ConvertAll(person =>
{
person.Selected = true;
return person;
});
Select all
기능을 사용하고 싶지는 않습니다.세트모든Selected
속성true
? - Yuval Itzchakov
그만큼ForEeach
메서드 (LINQ가 아님)는 목록의 각 항목에 대해 작업을 실행하지만 목록에서 항목을 필터링하는 데 사용되지 않으므로 결과를 반환하지 않습니다.
각 항목에 대해 메소드를 실행하십시오. 할당 할 결과가 없습니다.
People.ToList().ForEach(a => a.SELECTED = true);
속성이 변경된 항목의 새 목록을 원하면 항목을 복제하여 원본과 분리해야합니다.
List<Person_> PeopleUpdated = People.ToList().Select(a => {
Person_ b = a.Clone();
b.SELECTED = true;
return b;
}).ToList();
(클래스가 복제를 지원하지 않는 경우, 클래스를 구현해야합니다.Clone
방법 (및 바람직하게는IClonable
인터페이스).)
foreach(var p in People) p.SELECTED = true;
? - RangoPeople
이다IEnumerable
? - Yuval Itzchakovperson
' SELECTED 필드 / 속성을 선택하거나 필터 만 보내려고합니까?SELECTED
사람들. 그 후자의 경우, 그냥.Where(a => a.SELECTED)
- StuartLCPeopleUpdated
들어 있어야한다고? - 선택한 모든 사람들의 목록 또는 선택하도록 업데이트 된 사람들의 목록 (즉, 이미 선택되지 않은 사람). 아니면 그냥 실수일까요? - Jon Egerton