2016-10-11 3 views
0

동전 분수가있는 WPF 응용 프로그램이 있습니다. 10 밀리 초마다 이라는 listcoin[i]이 추가됩니다. 이 코인은 계산서 for (int i = 0; i < coins.Count; i++)를 위해 이것을 가진 동전을 찾아내는 생기로 생성한다.C# 목록 개체 제거

if (coins[i].Top > 550) 
{ 
    coins.RemoveAt(i); 
    canvas.Children.Remove(coin[i]); 
} 

( 마진을 사용하여 상단 위치를 설정하는 클래스의 일부이다 위) : 나는 호출 개체를 제거합니다.

그러나 coins.RemoveAt(i);을 사용하면 목록 번호도 함께 삭제되므로 목록 번호의 다른 모든 항목은 아래로 이동하여 '갭'을 닫습니다. 항목을 제거 할 때 "간격"을 채우지 못하게 할 방법이 있습니까?

+1

및 배열. 그리고 난 캔버스에. 칠판. 먼저 꺼내. – Paparazzi

+0

나는 이것에 대한 대답이 바로 canvas.Children을 호출하는 것이라고 생각한다. @Paparazzi가 말하고있는 것처럼, 먼저 동전 (I)을 제거하라. – DForck42

+0

목록의 최대 값에서 for 루프 시작 인덱스를 사용하십시오. 그런 다음 루프 카운트 다운을 실행하십시오. 그런 다음 인덱스를 제거 할 수 있으며 제거 할 때 인덱스가 잘됩니다. – deathismyfriend

답변

2

For 루프를 아래 코드로 바꿉니다. 이렇게하면 Top 속성이> 550 인 모든 동전을 찾은 다음 동전 목록과 캔버스에서 제거하여 반복합니다. 어린이 컬렉션.

var coinsToRemove = coins.Where(coin => coin.Top > 550); 

foreach (var coin in coinsToRemove) 
{ 
    coins.Remove(coin); 
    canvas.Children.Remove(coin); 
} 
0

동전. 인서트 (i, 새로운 동전()); 나는 당신의 "갭을 메우는"문제를 해결할 것이라고 생각하는 여분의 코드 라인입니다. 내 솔루션은 빈 개체로 간격을 채우는 것입니다. 내 테스트 사례 참조 :

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication8 
{ 
    class Program 
    { 
     class b 
     { 
      public int i; 
      public b(int x) { i = x; } //Constructor which instantiates objects with respective properties 
      public b() { }    //Constructor for empty object to fill gap 
     } 

     static void Main(string[] args) 
     { 
      List<b> integers = new List<b>(); //List of objects 
      integers.Add(new b(5));   //Add some items 
      integers.Add(new b(6)); 
      integers.Add(new b(7)); 
      integers.Add(new b(8)); 

      for (int i = 0; i < integers.Count; i++) 
      { 
       Console.WriteLine(integers[i].i); //Do something with the items 
      } 

      integers.RemoveAt(1);     //Remove the item at a specific index 
      integers.Insert(1, new b());   //Fill the gap at the index of the remove with empty object 
      for (int i = 0; i < integers.Count; i++) //Do the same something with the items 
      { 
       Console.WriteLine(integers[i].i);  //See that The object that fills the gap is empty 
      } 
      Console.ReadLine();      //Wait for user input I.E. using a debugger for test 
     } 
    } 
}