>백엔드 개발 >C++ >이전 C# 버전에서 형식이 안전한 속성 이름 검색을 어떻게 달성할 수 있습니까?

이전 C# 버전에서 형식이 안전한 속성 이름 검색을 어떻게 달성할 수 있습니까?

DDD
DDD원래의
2024-12-26 21:35:15997검색

How Can I Achieve Type-Safe Property Name Retrieval in Older C# Versions?

C#에서 nameof 연산자가 없는 경우의 형식 안전 해결 방법

속성 이름의 문자열 표현을 반환하는 nameof 연산자 는 C#에 최근 추가된 것입니다. 그러나 이전 버전의 C#에 이 연산자가 없으면 형식이 안전한 데이터 바인딩에 방해가 될 수 있습니다.

람다 표현식을 사용하는 형식이 안전한 솔루션

한 가지 해결 방법 이 문제는 람다 식을 사용하여 속성 이름을 얻는 것입니다. 이 접근 방식은 nameof와 유사한 기능을 제공하면서 유형 안전성을 보장합니다. 작동 방식은 다음과 같습니다.

  1. 정적 속성 메서드를 사용하여 Nameof라는 일반 클래스를 정의합니다.
  2. 속성 메서드 내에서 제공된 람다 식의 본문을 검색합니다.
  3. 본문을 MemberExpression으로 캐스팅하고 Member에서 속성 이름을 추출합니다. field.

사용 예

다음 코드는 이 해결 방법을 사용하는 방법을 보여줍니다.

class Program
{
    static void Main()
    {
        var propName = Nameof<Customer>.Property(e => e.Name);
        Console.WriteLine(propName);
    }
}

public class Nameof<T>
{
    public static string Property<TProp>(Expression<Func<T, TProp>> expression)
    {
        var body = expression.Body as MemberExpression;
        if(body == null)
            throw new ArgumentException("'expression' should be a member expression");
        return body.Member.Name;
    }
}

이 예에서 propName은 e => 표현식을 사용하여 속성을 호출한 후 문자열 "Name"을 포함합니다. e.Name.

참고: 이 해결 방법에는 .NET 3.5 이상이 필요합니다. .NET 2.0의 경우에는 다른 접근 방식이 필요합니다. 그러나 .NET 2.0에서 지원되지 않는 람다 식이나 리플렉션을 사용하지 않고는 nameof의 기능을 완전히 복제할 수 없습니다.

위 내용은 이전 C# 버전에서 형식이 안전한 속성 이름 검색을 어떻게 달성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.