2016-12-01 1 views
0

EDIT : 나는 완전히 잘못된 방향으로 가고 있었고 정밀 검사를 한 후에 작동하고 있음을 깨달았습니다. 팁 주셔서 감사합니다, 나는 그들을 명심하고 미래를 위해 노력할 것입니다.for 루프에서 각 값을 반환 C#

내 프로그램에서 비정상적인 문제가 발생했습니다. 내가해야 할 일은 두 시간의 차이를 발견하고, 1.5 시간으로 나누고, 시작 시간을 반환하고, 시작 시간의 1.5 시간마다 증가시킵니다. 따라서 시간이 오전 11시 45 분 - 오후 2:45 인 경우 시차는 3 시간, 3/1.5 = 2, 오전 11시 45 분 및 오후 1시 15 분에 반환됩니다. 지금은 한 번 이상 반환을 제외한 모든 것을 할 수 있습니다. 내가 시도한 것에 따라, 그것은 초기 시간 (오전 11시 45 분), 첫 번째 증가 (오후 1시 15 분) 또는 종료 시간 (오후 2시 45 분) 중 하나를 반환합니다. 지금까지 몇 가지 다른 유형의 for 및 do/while 루프를 시도했습니다. 가장 가까운 시간은 시작 시간과 증가 시간을 연결하는 것이었지만 시작 시간과 종료 시간은 3 - 6 시간 범위에서 가능하므로 실용적인 방법은 아닙니다.

최신 것은 내가 시도 :

int i = 0; 
do{ 
    i++; 
    //Start is the starting time, say 11:45 am 
    start = start.AddMinutes(90); 
    return start.ToShortTimeString(); 
} while (i < totalSessions); //totalSessions is the result of hours/1.5 

나는 (for 루프도있다) 동적 레이블의 기능 호출 해요 :

z[i] = new Label(); 
z[i].Location = new Point(PointX, PointZ); 
z[i].Name = "sessionTime_" + i; 
z[i].Text = getPlayTimes(dt.Rows[i][1].ToString()); 
tabPage1.Controls.Add(z[i]); 
z[i].BringToFront(); 
PointZ += z[i].Height; 

내가 꽤 새로 온 사람을 그래서 나는 어딘가에서 오해 한 것 같아.

+3

함수에서 여러 번 반환 할 수 없습니다. 함수의 반환 형식을'IEnumerable '으로 변경하면'yield return'을 사용할 수 있습니다.하지만 원하는대로 수행 할 수 있는지는 명확하지 않습니다. –

+0

첫 번째 단락은 이해하기에 너무 복잡합니다. –

+0

감사합니다 @ 스탠리, 나는 존재한다는 것을 전혀 몰랐습니다. –

답변

1

사용중인 전체 코드를 제공하지 않았기 때문에 정확한 사용 사례를 결정하기가 약간 어렵습니다.

public IEnumerable<string> GetPlayTimes() 
{ 
    int i = 0; 
    do 
    { 
     i++; 
     //Start is the starting time, say 11:45 am 
     start = start.AddMinutes(90); 
     yield return start.ToShortTimeString(); 
    } while (i < totalSessions); //totalSessions is the result of hours/1.5 
} 

을 그리고 다음과 같이 사용 : 그러나, 당신은 당신이 yield return 기능을 사용하여 요구하고 무엇을 할 수

foreach (var time in GetPlayTimes()) 
{ 
    // Do something with time 
} 
+0

고마워, 나는 그것을 줄 것이다. –

3

난 당신이 문제를 잘못된 방향으로 해결하기 위해 노력하고 생각합니다. 각각의 값을 반환하는 대신 컬렉션 ieList를 만들고 마무리 조건이 충족 될 때까지 목록에 각 결과를 푸시합니다.

그런 다음 반환 값으로 전체 배열을 반환하십시오. 이렇게하면 다른 논리와 교차 관심사가없는 멋진 자체 기능을 갖게됩니다. 단지 작은 일이지만 잘합니다.

행운을 빈다.

관련 문제