동적으로 변수 이름 검색: Reflection 및 C# 6.0 nameof를 사용하여 대안 탐색
중급으로 컴파일된 후 변수 이름 가져오기 언어(IL)는 프로그래밍에서 일반적인 문제입니다. 이 기사에서는 런타임 시 유형 및 멤버에 대한 메타데이터를 검사할 수 있는 .NET의 강력한 기능인 리플렉션을 활용하여 이 문제를 해결하는 방법을 살펴보겠습니다.
리플렉션의 한계
처음에는 리플렉션을 활용하여 변수 이름을 검색하는 것을 고려할 수 있습니다. 그러나 변수는 컴파일 후에 IL에서 이름을 유지하지 않는다는 점에 유의하는 것이 중요합니다. 결과적으로 리플렉션에만 의존하면 원하는 결과를 얻을 수 없습니다.
표현 트리 및 클로저 입력: 해결 방법
리플렉션의 한계에도 불구하고 독창적인 해결 방법. 표현식 트리를 사용하면 변수를 클로저로 승격할 수 있습니다. 이 기술은 본질적으로 컴파일 타임에 변수의 컨텍스트를 캡처하므로 나중에 GetVariableName
구현 및 사용법
다음은 이 접근 방식을 보여주는 예입니다.
static string GetVariableName<T>(Expression<Func<T>> expr) { var body = (MemberExpression)expr.Body; return body.Member.Name; } static void Main() { var someVar = 3; Console.Write(GetVariableName(() => someVar)); }
이 메서드는 본문에서 MemberExpression 인스턴스를 추출하여 작동합니다. 제공된 람다 표현식의 그런 다음 MemberExpression의 Member 속성은 변수의 이름을 보유합니다.
단점 및 성능 고려 사항
이 해결 방법은 리플렉션의 한계를 우회하지만 성능상의 단점이 있습니다. 여러 개체 생성, 인라인 불가능한 과도한 메서드 호출, 과도한 리플렉션 사용으로 인해 대기 시간이 발생할 수 있습니다. 따라서 성능이 중요한 코드 경로에서는 이 접근 방식을 사용하지 않는 것이 좋습니다.
C# 6.0의 키워드 이름: A Simpler Solution
C# 6.0의 출현과 함께 , 훨씬 더 간단한 솔루션인 nameof 키워드가 나타났습니다. 이 키워드는 컴파일 타임에 변수, 속성 또는 메서드의 이름에 액세스하는 간결하고 편리한 방법을 제공합니다.
이제 원래 예에서는 아래와 같이 nameof를 사용하여 변수 이름을 쉽게 검색할 수 있습니다.
static void Main() { var someVar = 3; Console.Write(nameof(someVar)); }
nameof 키워드는 GetVariableName 메서드와 동일한 기능을 제공하지만 향상된 기능을 제공합니다. 성능.
결론
.NET에서 변수 이름을 검색하려면 신중한 고려가 필요합니다. 리플렉션 및 식 트리는 런타임에 변수 이름을 얻기 위한 해결 방법을 제공하지만 성능에 미치는 영향을 고려해야 합니다. 이와 대조적으로 C# 6.0의 nameof 키워드는 이러한 성능 문제를 제거하고 이 작업에 대한 보다 효율적인 솔루션 역할을 합니다.
위 내용은 C#에서 변수 이름을 동적으로 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!