[Issue Resolution - C#] CS1503 : Action 활용 시, Parameter를 lambda로 해결하자!

2024. 6. 23. 19:56·이슈 해결

C#을 사용하면서 Action과 delegate를 활용해 본 적이 있다면, 매개변수를 전달하는 데 어려움을 겪을 수 있다.

특히, CS1503 오류와 같이 void 타입을 System.Action으로 변환할 수 없다는 메시지를 접할 때 혼란스러울 수 있다.

이번 글에서는 CS1503 오류의 원인과 이를 해결하는 방법에 대해 알아보자.


# 1. 오류 확인

먼저, CS1503 오류 메시지를 살펴보자.

해당 오류는 void 반환 타입을 갖는 메서드를 Action 타입으로 변환할 수 없을 때 발생한다.

이를 이해하기 위해 실제 코드를 살펴보자.

GetButton((int)Buttons.Move_Restore_Button).gameObject.BindEvent(OnClickButtonMoveScene(Define.SceneType._2DollRestoreScene));

public static void BindEvent(this GameObject go, Action action, Define.UIEvent type = Define.UIEvent.Click)
{
    // 메서드 구현
}

위 코드에서 BindEvent 메서드는 Action 타입의 매개변수를 기대한다.

그러나 OnClickButtonMoveScene 메서드를 호출하여 전달하려고 하면 오류가 발생한다.


# 2. 오류 원인

Action 델리게이트는 매개변수가 없는 메서드를 나타내기 위해 사용된다.

Action 델리게이트의 시그니처는 아래와 같다.

public delegate void Action();

 

그러나, 현재 OnClickButtonMoveScene 메서드는 매개변수를 필요로 한다.

void OnClickButtonMoveScene(Define.SceneType sceneType)
{
    // 메서드 구현
}

이와 같이 OnClickButtonMoveScene 메서드는 Define.SceneType 타입의 매개변수를 가지고 있으므로, Action으로 직접 변환할 수 없다. 따라서 void 반환값을 가지는 메서드를 Action 타입으로 변환하려고 하면 CS1503 오류가 발생한다.


# 3. 해결 방법

이 문제를 해결하려면, 람다 표현식을 사용하여 OnClickButtonMoveScene 메서드를 호출하도록 해야 한다. 람다 표현식을 사용하면 매개변수가 있는 메서드를 Action으로 변환할 수 있다. 아래는 수정된 코드이다.

GetButton((int)Buttons.Move_Restore_Button).gameObject.BindEvent(() => OnClickButtonMoveScene(Define.SceneType._2DollRestoreScene));

이 코드는 OnClickButtonMoveScene 메서드를 람다 표현식으로 감싸서 Action으로 변환한다. 이를 통해 BindEvent 메서드가 기대하는 Action 타입의 인수를 전달할 수 있게된 점을 알 수 있다.


# 4. 결론

C#에서 Action 델리게이트를 사용할 때 매개변수가 있는 메서드를 직접 전달할 수 없으므로, 람다 표현식을 사용하여 이를 해결할 수 있다. CS1503 오류는 이러한 상황에서 발생하며, 위에서 설명한 방법을 사용하면 쉽게 해결할 수 있습니다.

 

이번 포스팅을 통해 CS1503 오류에 대해 이해하고, 해결하는 데 도움이 되었기를 바랍니다.

추가 질문이나 의견이 있으시다면 댓글로 남겨주세요. :)

'이슈 해결' 카테고리의 다른 글

[Unity - Build Error] Gradle build failed. See the Console for details.  (0) 2024.11.18
[Issue Resolution - FIrebase] Could not find a working python interpreter.  (0) 2024.08.05
'이슈 해결' 카테고리의 다른 글
  • [Unity - Build Error] Gradle build failed. See the Console for details.
  • [Issue Resolution - FIrebase] Could not find a working python interpreter.
Logger's
Logger's
생각을 담는 공간 이곳은 게임 개발 아카이브
  • Logger's
    Game Development Archive
    Logger's
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (24)
      • Unity (7)
      • C# (4)
      • 디자인 패턴 (3)
      • 자료구조&알고리즘 (0)
      • Tip (5)
      • 이슈 해결 (3)
      • IDE (2)
      • C++ (0)
      • C++ STL (0)
      • DirectX (0)
      • 잡담 (0)
      • 취미 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    DirectX #Refraction #Reflection
    swipe
    utf-8
    DirectX #Supersampling
    모바일 환경
    .editorconfig
    유니티
    Computer Graphics
    Unity
    DirectX #Texturing
    한글 깨짐
    drag
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
Logger's
[Issue Resolution - C#] CS1503 : Action 활용 시, Parameter를 lambda로 해결하자!
상단으로

티스토리툴바