
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 |