List <T> 요소에 특정 속성 값이있는 항목이 있는지 확인하는 방법


113
public class PricePublicModel
{
    public PricePublicModel() { }

    public int PriceGroupID { get; set; }
    public double Size { get; set; }
    public double Size2 { get; set; }
    public int[] PrintType { get; set; }
    public double[] Price { get; set; }
}

List<PricePublicModel> pricePublicList = new List<PricePublicModel>();

의 요소에 pricePublicList특정 값 이 포함되어 있는지 확인하는 방법 . 좀 더 정확히 말해서, 존재하는지 확인하고 싶습니다 pricePublicModel.Size == 200. 또한이 요소가 존재하는 경우 어떤 요소인지 어떻게 알 수 있습니까?

편집 사전이 이것에 더 적합하다면 사전을 사용할 수 있지만 방법을 알아야합니다. :)

답변:


186

목록이 있고 목록 내에서 주어진 기준과 일치하는 요소가있는 위치를 알고 싶다면 FindIndex인스턴스 메서드를 사용할 수 있습니다 . 같은

int index = list.FindIndex(f => f.Bar == 17);

f => f.Bar == 17기준이 일치하는 술어는 어디에 있습니까 ?

귀하의 경우에는

int index = pricePublicList.FindIndex(item => item.Size == 200);
if (index >= 0) 
{
    // element exists, do what you need
}

1
해당 값의 속성을 모르는 경우 어떻게합니까? 예를 들어 "18.00"을 표시하는 목록 항목이 있습니다.이 항목의 출처를 모르기 때문에 속성에이 값이 있는지 확인하고 싶습니다. 그래서 기본적으로이 예제와 비슷하게 .size 또는 .bar가 없습니다. 알아 내고 싶습니다
Haithem

항목이 존재하지 않는 경우 : 인덱스 값은 무엇입니까?
BKSpurgeon

8
참고 : 요소가 존재하지 않으면를 findIndex반환 –1합니다. 문서 : msdn.microsoft.com/es-es/library/x1xzf2ca(v=vs.110).aspx
tomloprod

1
@tomloprod 그래서 그가 0보다 크거나 같은 인덱스를 확인합니다. (인덱스> = 0). (index> -1)처럼 쓸 수도 있습니다.
DannyC

127
bool contains = pricePublicList.Any(p => p.Size == 200);

6
이것은 엄격하게 존재하는지 확인하는 것입니다.
Daniel A. White

3
이것은 실제로 질문에 대한 답이 아닙니다. 그는 말했다,how to know which one is it
George Johnston

15
그의 질문에 답하지 못할 수도 있지만, 내 컬렉션에 지정된 이름의 개체가 이미 존재하는지 확인해야했기 때문에 도움이되었습니다. 개선 된 .Contains-method를 기대했는데 이것이 바로이 LINQ-expression이하는 일입니다. 감사합니다.
이고르

3
제목 의 질문에 답합니다 . OP는 설명에서 그가 원하는 것을 정확히 원하지 않는다고 설명 합니다. 그래도 그 중 한 명이 있고 수십 명이 구글을 통해이 질문을 찾는다. 그의 제목 질문에 대한 진정한 답을 찾을 수있는 것이 더 중요하다고 생각합니다.
MGOwen

5
누군가 이것을 시도하고 .Any () 가 인식되지 않으면 System.Linq를 사용하여 추가해야합니다 . 파일 상단에 있습니다.
MGOwen

32

당신은 존재를 사용할 수 있습니다

if (pricePublicList.Exists(x => x.Size == 200))
{
   //code
}

13

LINQ를 사용하면 매우 쉽습니다.

var match = pricePublicList.FirstOrDefault(p => p.Size == 200);
if (match == null)
{
    // Element doesn't exist
}

이 조건과 일치하는 요소를 직접 편집 할 수 있습니까? 그것을 가져 와서 새로운 개체에 저장하지 않고 직접 변경 하시겠습니까?
ilija veselica

match반환 된 값은 수정할 수 있습니다 ( PricePublicModel목록에 있던 개체).
Jacob

null이 될 수있는 개체를 직접 수정해서는 안됩니다. 언제든지 할 수 있습니다 : match.Size = 300;또는 foreach(var item in pricePublicList.Where(p => p.Size == 200)) item.Size = 300;. 그래도 한 줄로 사용하지 않을 것입니다.
Amy West

11

원하는 작업을 List<T>정확히 수행하는 메서드를 제공 하기 때문에 실제로 LINQ가 필요하지 않습니다 Find.

지정된 조건 자에 정의 된 조건과 일치하는 요소를 검색하고 전체 List<T>.

예제 코드 :

PricePublicModel result = pricePublicList.Find(x => x.Size == 200);

4
var item = pricePublicList.FirstOrDefault(x => x.Size == 200);
if (item != null) {
   // There exists one with size 200 and is stored in item now
}
else {
  // There is no PricePublicModel with size 200
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.