2010-08-12 6 views

답변

14

간단 할 수 있습니다. 기본적으로 클래스는 참조 평등을 사용합니다. 공통적 인 실수는 동일한 필드가있는 두 클래스 인스턴스를 만들고 이 같은 것으로 계산할 것으로 예상하는 것입니다.입니다. 이렇게하려면 Equals을 실제로 오버라이드해야합니다 (동일한 T의 경우 IEquatable<T>을 구현하는 것이 이상적입니다). Equals을 무시한 경우 GetHashCode==!= 연산자로 바꿔야합니다.

또 다른 대안은 A, B, C, D 등 4 요소가

2
+1

작은 쪽지 : 질문에 'C#'태그가 붙어 있으므로 ['List .IndexOf (T)'] (http://msdn.microsoft.com/en-us/library/8bd0tetb. aspx) – gehho

0

단순이이 목록의 이름이 objList입니다 가정 시도;

b
int index = list.IndexOf(b); 

이 찾을 수있는 일이 그러나 평등의 정의를 통해 여기에 모호함이 : 그런 다음

int index = objList.IndexOf("B"); 
+0

그는 -1을 제공하지만, 나는 C와 B에 대해 1과 같이 0을, D에 대해서는 3을 필요로합니다. –

10

이 가정 모든 일을 피할 수있는 조건이나 비교 자와 경기를 찾는 것입니다.

List Char = new List(); Char.Add ("A"); Char.Add ("B"); Char.Add ("C"); Char.Add ("D");

 int index = Char.IndexOf("B"); 

때문에 출력 내가이 당신을 도움이되기를 바랍니다 1 (B의 인덱스)

될 것입니다.

+0

좋은 답변, 이것은 반드시 작동합니다 –

+0

감사합니다 Ankur ... – PrateekSaluja

0

복잡한 유형의 목록이있는 경우 상황이 다소 복잡해집니다. 귀하의 목록에는 동일한 매개 변수를 가진 여러 객체가있을 수 있음을 알아야합니다 (예 : 목록에 "A"가 거의 없을 수 있습니다. 모든 것이 목록을 조회하는 것입니다.

저는 자주 사용합니다.

var results = (from i in people 
       where i.name == "Alexander" //here you put your predicate 
       select myList.indexOf(i)); 

또는

var results = people.Where(p=>p.name == "Alexander"); //this gives You full objects, not indices 

나는 이름이 "알렉산더"모든 사람들의 인덱스의 목록을 가지고 그런 식으로. 루프를 통해 루프를 돌리거나 단일 루프 또는 다른 루프를 얻을 수 있습니다.

목록에는 찾고자하는 값의 색인이 여러 개있을 수 있습니다.

관련 문제