상속 된 속성이 클래스 (하위 클래스)의 일부인지 확인하는 방법

Sallushan

나는 그 속성이 해당 클래스에 존재하는지 확인 하기 위해 MemberExpression's 를보고에서 찾을 수있는 일반 함수를 만들려고합니다 . 일반 속성에서는 잘 작동하지만 상속 된 속성에서는 찾지 못합니다.MemberType

class Person {
    public string FirstName {get;set;}
    public string LastName {get;set;}       
}

class Student : Person {
    public string StudentID {get;set;}
}

public static void Main()
{
    bool test1 = IsPropertyPartOfClass<Student, string>(x => x.StudentID);
    Console.WriteLine("Testing StudentID property");
    if (test1)
        Console.WriteLine("\tProperty is part of Class");
    else
        Console.WriteLine("\tProperty is not part of Class");

    bool test2 = IsPropertyPartOfClass<Student, string>(x => x.FirstName);
    Console.WriteLine("Testing FirstName property");
    if (test2)
        Console.WriteLine("\tProperty is part of Class");
    else
        Console.WriteLine("\tProperty is not part of Class");
}

public static bool IsPropertyPartOfClass<T, R>(Expression<Func<T, R>> expPropSel){
    MemberInfo mem_info_from_exp = ((MemberExpression)((LambdaExpression)expPropSel).Body).Member;
    return typeof(T).GetProperties().Where(x=> x == mem_info_from_exp).Any();
}

산출:

Testing StudentID property
    Property is part of Class
Testing FirstName property
    Property is not part of Class

최신 정보:

@NetMage의 도움으로 방법을 수정할 수있었습니다. 내 메서드는 이제식이 다른 하위 클래스 일 T수있는 반면 매개 변수가 다른 하위 클래스를 나타낼 수있는 경우도 다루고 있습니다.

var employeeObj = new Employee(); // here Employee is also inherited from Person class
trickyTest = IsPropertyPartOfClass<Student, string>(x => employeeObj.FirstName);

위의 예에서 함수가 false.

public static bool IsPropertyPartOfClass<T, R>(Expression<Func<T, R>> expPropSel) {
    MemberInfo mem_info_from_exp = ((MemberExpression)((LambdaExpression)expPropSel).Body).Member;
    Type sourceType = ((MemberExpression)((LambdaExpression)expPropSel).Body).Expression.Type;
    return typeof(T)
                .GetProperties()
                .Where(x=> 
                            sourceType == typeof(T) &&
                            (
                                (x == mem_info_from_exp) || 
                                (
                                    x.Name == mem_info_from_exp.Name &&
                                    x.Module.Equals(mem_info_from_exp.Module) && 
                                    x.MetadataToken == mem_info_from_exp.MetadataToken
                                )
                            )
                )
                .Any();
}
NetMage

ReflectedType사이에 다른 MemberInfo람다과에서 PropertyInfo아마도 사용한다 - 유형에서 s는 HasSameMetadataDefinitionAs?

추가 된 이유는 여기 에서 설명을 참조하십시오 .

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

모듈 속성이 클래스인지 확인하는 방법

분류에서Dev

상속 된 클래스의 포인터를 확인하는 방법은 무엇입니까?

분류에서Dev

파이썬의 단일 클래스에서 클래스의 여러 인스턴스를 상속하는 방법

분류에서Dev

상속 된 클래스 메서드를 사용하고 하위 클래스를 유지하는 방법

분류에서Dev

믹스 인의 대상 클래스가 메타 클래스에서 상속 된 경우 믹스 인을 타이핑하는 방법은 무엇입니까?

분류에서Dev

상속 된 클래스 모음에서 하위 클래스의 속성 손실

분류에서Dev

mocha 테스트 내부의 'this'가 클래스 속성에 액세스 할 수 있는지 확인하는 방법

분류에서Dev

PHP는 부모 클래스의 네임 스페이스 상속에서 클래스를 중지하는 방법

분류에서Dev

Asp.net 핵심 종속성 주입에 등록 된 자식 클래스에서 부모 클래스 인스턴스를 확인하는 방법

분류에서Dev

신속하게 내 클래스에 동일한 이름의 하위 클래스가있을 때 최상위 클래스를 참조하는 방법

분류에서Dev

클래스의 각 속성에 할당 된 값이 있음을 확인하는 TypeScript의 일반 테스트

분류에서Dev

부모 클래스의 배열에서 하위 클래스의 속성에 액세스하는 방법

분류에서Dev

jquery를 사용하여 일부 클래스가있는 확인란 필드에 확인 된 속성을 추가하는 방법

분류에서Dev

SwiftUI NSManagedObject 하위 클래스의 계산 된 속성을 변경하는 방법

분류에서Dev

결합 된 상속의 하위 클래스에 대한 CUBA 고유 속성이 지원되지 않음

분류에서Dev

상속 된 클래스를 속성을 유지하는 다른 상속 된 클래스로 변경

분류에서Dev

미리 정의 된 속성이있는 UITableView 하위 클래스

분류에서Dev

클래스 속성이 비공개인지 공개인지 확인하는 방법은 무엇입니까?

분류에서Dev

상속 된 멤버가 파생 클래스에서 액세스 할 수 없는지 확인하면서 공용 상속의 이점을 계속 유지하는 방법이 있습니까?

분류에서Dev

클래스가 부모 클래스 또는 특성의 하위 클래스인지 확인하는 방법은 무엇입니까?

분류에서Dev

Java의 자식 클래스를 통해 상속 된 함수의 일부를 비활성화하는 방법이 있습니까?

분류에서Dev

상속 된 클래스의 기본 클래스에서 배열 크기를 지정하는 방법이 있습니까?

분류에서Dev

ctypes.Structure에서 상속 된 클래스의 하위 클래스 전달

분류에서Dev

구체적인 자식 클래스의 재정의 된 메서드에서 추상 클래스의 생성자를 통해 인스턴스화 된 개체의 속성에 액세스하는 방법은 무엇입니까?

분류에서Dev

포인터 속성이 모두 초기화 된 상태에서 QGraphicsItem을 생성 된 클래스로 다운 캐스트하는 방법은 무엇입니까?

분류에서Dev

다중 상속을 사용하여 일부 상위 클래스 속성 값을 가져 오는 방법

분류에서Dev

컴파일 타임에 클래스에 상속 된 함수가 있는지 확인하는 방법은 무엇입니까?

분류에서Dev

클래스 내부의 속성을 변경하는 방법

분류에서Dev

인스턴스화없이 클래스 속성을 복사하는 방법

Related 관련 기사

  1. 1

    모듈 속성이 클래스인지 확인하는 방법

  2. 2

    상속 된 클래스의 포인터를 확인하는 방법은 무엇입니까?

  3. 3

    파이썬의 단일 클래스에서 클래스의 여러 인스턴스를 상속하는 방법

  4. 4

    상속 된 클래스 메서드를 사용하고 하위 클래스를 유지하는 방법

  5. 5

    믹스 인의 대상 클래스가 메타 클래스에서 상속 된 경우 믹스 인을 타이핑하는 방법은 무엇입니까?

  6. 6

    상속 된 클래스 모음에서 하위 클래스의 속성 손실

  7. 7

    mocha 테스트 내부의 'this'가 클래스 속성에 액세스 할 수 있는지 확인하는 방법

  8. 8

    PHP는 부모 클래스의 네임 스페이스 상속에서 클래스를 중지하는 방법

  9. 9

    Asp.net 핵심 종속성 주입에 등록 된 자식 클래스에서 부모 클래스 인스턴스를 확인하는 방법

  10. 10

    신속하게 내 클래스에 동일한 이름의 하위 클래스가있을 때 최상위 클래스를 참조하는 방법

  11. 11

    클래스의 각 속성에 할당 된 값이 있음을 확인하는 TypeScript의 일반 테스트

  12. 12

    부모 클래스의 배열에서 하위 클래스의 속성에 액세스하는 방법

  13. 13

    jquery를 사용하여 일부 클래스가있는 확인란 필드에 확인 된 속성을 추가하는 방법

  14. 14

    SwiftUI NSManagedObject 하위 클래스의 계산 된 속성을 변경하는 방법

  15. 15

    결합 된 상속의 하위 클래스에 대한 CUBA 고유 속성이 지원되지 않음

  16. 16

    상속 된 클래스를 속성을 유지하는 다른 상속 된 클래스로 변경

  17. 17

    미리 정의 된 속성이있는 UITableView 하위 클래스

  18. 18

    클래스 속성이 비공개인지 공개인지 확인하는 방법은 무엇입니까?

  19. 19

    상속 된 멤버가 파생 클래스에서 액세스 할 수 없는지 확인하면서 공용 상속의 이점을 계속 유지하는 방법이 있습니까?

  20. 20

    클래스가 부모 클래스 또는 특성의 하위 클래스인지 확인하는 방법은 무엇입니까?

  21. 21

    Java의 자식 클래스를 통해 상속 된 함수의 일부를 비활성화하는 방법이 있습니까?

  22. 22

    상속 된 클래스의 기본 클래스에서 배열 크기를 지정하는 방법이 있습니까?

  23. 23

    ctypes.Structure에서 상속 된 클래스의 하위 클래스 전달

  24. 24

    구체적인 자식 클래스의 재정의 된 메서드에서 추상 클래스의 생성자를 통해 인스턴스화 된 개체의 속성에 액세스하는 방법은 무엇입니까?

  25. 25

    포인터 속성이 모두 초기화 된 상태에서 QGraphicsItem을 생성 된 클래스로 다운 캐스트하는 방법은 무엇입니까?

  26. 26

    다중 상속을 사용하여 일부 상위 클래스 속성 값을 가져 오는 방법

  27. 27

    컴파일 타임에 클래스에 상속 된 함수가 있는지 확인하는 방법은 무엇입니까?

  28. 28

    클래스 내부의 속성을 변경하는 방법

  29. 29

    인스턴스화없이 클래스 속성을 복사하는 방법

뜨겁다태그

보관