class A : IFCTest
{
public void Start()
{
//
List<string> xml = StudentList();
}
public List<string> StudentList()
{
foreach(string xml in StudentList)
{
Datacheck(xml);
}
}
public void DataCheck(string)
{
if(string =="foo")
return null; //여기서 상위 함수도 종료하고싶습니다
}
}
이런식으로 class A에 IFCTest라는 인터페이스를 상속받아서 작업중인데
Start함수를 실행 → public List StudentList() → DataCheck 함수에서 특정 조건(if(string ==“foo”))에 걸리면
Start함수 자체를 종료하고 싶은데 방법을 잘 모르겠습니다…
"중첩된 반복문 안에서 특정 레벨의 루프문 까지만 탈출하고 싶다"와 비슷한 고민일 것 같은데요, 이 정도라면 보통은 로직을 리팩토링하는 것이 좋아 보이며, 흔히 말하는 '코드 스멜’에 해당되는 것 같습니다.
만들고자 하시는 코드가 어떤 목적을 달성해야 하는지 알 수 없어 부정확한 답변이 될 수 있는 점 먼저 양해 구하겠습니다. 저라면, 다음과 같이 StudentList에 들어올 데이터를 미리 거르는 작업을 하지 않을까 예상해봅니다.
var xml = new List<string>();
//xml.Add("foo");
// 케이스 1: filteredList에는 foo 라는 문자열이 들어있지 않은 요소만 남습니다.
var filteredList = xml.Where(x => string.Equals(x, "foo", StringComparison.Ordinal)).ToList();
Console.WriteLine(filteredList.Count);
// 케이스 2: filteredList에 foo라는 문자열이 있을 경우 함수를 종료합니다.
var hasFoo = xml.Any(x => string.Equals(x, "foo", StringComparison.Ordinal));
if (hasFoo)
{
Console.WriteLine("filteredList has foo.");
return;
}