C# 함수안에 다른 함수 선언 후 전체 함수 종료

안녕하세요
c# netframework 4.8에서 작업중인데 질문이 하나 있습니다.

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함수 자체를 종료하고 싶은데 방법을 잘 모르겠습니다…

1개의 좋아요

DataCheck 함수를 리턴받아서 그 값에 따라서 StudentList 안에 있는 foreach 문에서 return하고…또 바깥 Start에서 리턴하고 그러면 되는거 아닌가요?

다른 창의적인 방법을 원하시는 건가요?

2개의 좋아요

앗 저는 혹시 듣기로는 자바같은 경우는

throw new Exception()

로 return 작업을 여러번 안해줘도 되는거 같더라고요…(아직 제대로 확인은 못했습니다)
혹시 c#에서도 비슷한 기능이 있는지 궁금했습니다! ㅎㅎ

답변 감사합니다 일단 그렇게 진행해보겠습니다 ㅎㅎ

3개의 좋아요

오잉…자바든 아니든 바깥으로 빠져나가기 위해 예외를 던지다뇨…?? 그런 처리 방식은 듣도보도 못했네요…물론 결과만 보면 그렇게 해도 되긴하는데 상당히 비정상 적인 방법으로 보여집니다.

굳이 원하시면…C#도 그렇게 하시면 예외를 걸어서 바깥으로 나갈 수는 있습니다.

5개의 좋아요

"중첩된 반복문 안에서 특정 레벨의 루프문 까지만 탈출하고 싶다"와 비슷한 고민일 것 같은데요, 이 정도라면 보통은 로직을 리팩토링하는 것이 좋아 보이며, 흔히 말하는 '코드 스멜’에 해당되는 것 같습니다.

만들고자 하시는 코드가 어떤 목적을 달성해야 하는지 알 수 없어 부정확한 답변이 될 수 있는 점 먼저 양해 구하겠습니다. 저라면, 다음과 같이 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;
}

참고: 코드 스멜 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)

8개의 좋아요

답변 감사합니다! 또 하나 배운거같습니다 ㅎㅎ 감사합니다! :grinning:

3개의 좋아요

편의를 위해 이런 생각을 해 볼 수는 있겠으나
SRP 를 생각해본다면 그다지 좋은 선택은 아니지요. -ㅁ-;;;

이 얘기가 그 얘기 입니닷…-ㅅ-;;;

메서드는 그 내부에서 자기 자신의 범위에 한 해서만 책임지도록 작성해야
의존성 밥 비벼 먹어서 보물찾기 하는 사태를 막을 수 있슴다…

아니면 직접 경험해 보는 것도 좋… 쿨럭… ;ㅂ;

7개의 좋아요

로직 탈출을 오류 던지기로 탈출하는건
제 선입견일까요? 되게 안 좋을 것 같다는 생각이 드는데…
약간 흑마법(?) 같다는 느낌이 들어서요.

2개의 좋아요

질문 다시보니깐 아찔하군요…답변 감사합니다

4개의 좋아요

꼭 그렇지만은 않다고 전 생각해요. 그런 고민을 하는 것부터 좋은 코딩의 시작인 것 같아요. 화이팅~!

4개의 좋아요

다른분은 어떨런지 모르겠는데
전 항상 과거에 쓴 제 코드가 맘에 안 들더군요 히히;
부끄럽고 쪽팔리고…

4개의 좋아요

저도 그래요 ^^;

4개의 좋아요

@StarDolarge 저도 매 순간이 아찔합니다… ㅋ

3개의 좋아요