2012-01-21 4 views
0

나는 버튼의 목록을하고 난 '동일'인 두 요소 싶어 :찾기 '쌍'

for (int i = 0; i < Memory.Count; i++) 
{ 
    piezas = Memory.FindAll(s => (s.Name != Memory[i].Name && Utilidades.CompareImage(s.Image, Memory[i].Image))); 
} 

이 가정된다 (내가 잘못 아니에요 경우) 목록을 이름이 다르지만 동일한 이미지를 사용하는 두 요소가 있습니다. 나는 그런 요소가 존재한다는 것을 확신하지만 ... 왜 이것이 작동하지 않는지 모르겠습니다.

는 "Utilidades.CompareImage"는 정적 방법 :

public static bool CompareImage(Image firstImage, Image secondImage) 
     { 
      MemoryStream ms = new MemoryStream(); 
      firstImage.Save(ms, System.Drawing.Imaging.ImageFormat.Png); 
      String firstBitmap = Convert.ToBase64String(ms.ToArray()); 
      ms.Position = 0; 

       secondImage.Save(ms, System.Drawing.Imaging.ImageFormat.Png); 
      String secondBitmap = Convert.ToBase64String(ms.ToArray()); 

      if (firstBitmap.Equals(secondBitmap)) 
       return true; 
      else 
       return false; 
     } 

내가 전에 방법을 테스트했고들이 의도로 작동합니다.

도와주세요.

+0

코드 결과를 어떻게 확인하고 있습니까? 중간 결과를 보여주는 디버그 문을 추가하십시오. 코드는 '그냥 작동 할 것'처럼 보입니다. ... –

+0

중단 점을 사용하면 var가 절대 2가 아니며 내 조건자가 잘못된 경우가 아니면 사용해야합니다. – Areks

+0

그럼 2가 아닌 '두 요소 목록'이어야합니다. –

답변

1

코드

for (int i = 0; i < Memory.Count; i++) 
{ 
    var piezas = Memory.FindAll(s => (s.Name != Memory[i].Name 
      && Utilidades.CompareImage(s.Image, Memory[i].Image))); 
} 

그것을 사용하지 않는 다음 새 'piezas'모든 시간을 만들고.
또한 모든 조합을 두 번 확인하고 있습니다.

그래서 모든 쌍, 첫 번째 쌍 또는 그 사이의 무언가를 찾고 싶습니까? 그것은 아무도 보인다

for (int i = 0; i < Memory.Count; i++) 
{ 
    var piezas = Memory.FindAll(s => (s.Name != Memory[i].Name 
      && Utilidades.CompareImage(s.Image, Memory[i].Image))); 

    if (piezas.Count > 0) 
    { 
     // use piezas[0] somehow 
     break; 
    } 
} 
+0

예, 사실을 밝히지 않아서 정말 유감입니다. 그냥 첫 번째 쌍을 원한다. (그리고 나는 'piezas'를 사용한다. 그러나 관련이 없기 때문에 복사하지 않았다.) – Areks

+0

그럼'var '으로 선언하여 오도하지 말아라. –

+0

안녕, 고마워. 나는 그것을 사용하고 있었고, 그것은 바로 piezas.Count는 결코 두 가지가 아니 었습니다. FindAll의 쿼리가 맞습니까? – Areks

1

빠른 수정,하지만 지금까지 완벽한에서 아직 SelectMany 언급 :

var pieza = Memory.SelectMany((m, i) => 
Memory.Where((m2, j) => i < j && m.Name != m2.Name && 
Utilidades.CompareImage(m.Image, m2.Image)) 
.Select(m2 => Tuple.Create(m, m2))).First(); 

당신은 (모든 쌍, 하나, 최종 첫 번째를 대체하지를 원하는 경우) ToList() 또는 이와 비슷한 호출합니다.