문자열 보간을 상수로 string.Format 처럼 이용하는 방법이 있나요?

예를 들면

기존에는 이렇게 사용했습니다.

public const string NullMessage = "This object is null. Target:{0}";

var some = new object();
var message = string.Format(NullMessage, some);

NullMessage 를 별도의 상수 클래스로 뽑아서 관리하면
message 를 쓰는 위치에서는 문자 리터럴을 직접 쓸 일이 없어서 관리가 편했는데요…

저 NullMessage 처럼 껍딱 문자열을 상수로 보관해 놓고
사용하는 시점에서 문자열 보간을 이용해 처리하는 방법이 있을까요?

이런 식으루 말이죠.

public const string NullMessage = "This object is null. Target:{target}";

var target = new object();
var message = $NullMessage{target}; // 이런식으로 쓰고 싶지만... 안 됨.. ;ㅂ;

안 되겠죠…?ㅁ?

사실 이거 기존 로그나 메시지 처리할 때

throw new Exception($"There is no matched value. target :{source}");

이런식으로 ‘문자 리터럴 + 할당값’ 으로 새로운 문자열을 만드는 걸 소스 코드 중간에 잔뜩 만들어서 썼는데

이 로그 문자열을 반복적으로 사용하게 되니까
"There is no matched value. target :문자 리터럴을 소스코드에서 반복적으로 쓸 수밖에 없더군요.

그래서 기존 formatter 방식으로 돌아가야하나… 고민 중입니다.

이거 제가 기본기가 약해서 모르는 건지, 그냥 안 되는 건지 모르겠어요…
(찾아봐도 상수를 핸들링하는 건 나오는데 제가 원하는 건 안 나오더라구요… -ㅂ-;; )

혹시 방법을 아시나욜 ?ㅁ?

3개의 좋아요

저도 비슷한 고민을 했어서 잠시 관련 정보를 조사한 적이 있었는데요, 문자열 보간은 컴파일 시점에서 코드로 변환되기 때문에 안되는 것으로 알고 있습니다.

4개의 좋아요

네. 맞습니다. 다만, C# 10에서는 선택지가 조금 더 넓어져서, 컴파일 타임에서 상수로 확정이 가능하다면 상수를 문자열 보간의 인자로 활용할 수 있게 조금 더 유연해지긴 했습니다.

5개의 좋아요