BindingFlags.IgnoreCase가 Type.GetProperty ()에서 작동하지 않습니까?


183

다음을 상상해보십시오

유형 T에는 회사 필드가 있습니다. 다음 방법을 실행할 때 완벽하게 작동합니다.

Type t = typeof(T);
t.GetProperty("Company")

Whith 다음 호출은 null이됩니다.

Type t = typeof(T);
t.GetProperty("company", BindingFlags.IgnoreCase)

아무도 아이디어가 있습니까?


20
@OregonGhost : 중요합니까?
leppie

9
메타 질문은 유효하지만 실제로는 중요하지 않습니다. 내 질문의 대부분으로, 나의 주된 이유는 지식에 대한 굶주림입니다.)
Boris Callens

1
@ leppie : 그렇습니다. 어쩌면 내가 알지 못하는 유스 케이스가있을 수 있으며 사람들이 왜 일을하고 싶어하는지 항상 흥미 롭습니다.
OregonGhost

21
@OregonGhost : .Net을 대상으로하는 모든 언어가 대소 문자를 구분하지는 않으므로 언젠가는 대소 문자를 구분하지 않는 조회를해야합니다.
팝 카탈린

2
유스 케이스 : 그래서 필드를 어떻게 입력했는지 걱정하지 않고 MSSQL Compact Entity와 객체를 비교할 수 있습니다. (일부 필드가 isSomething 및 IsSomething 인 컴팩트 데이터베이스와 객체를 비교하고 있습니다.) 즉, 게으름을 피하기 위해.
teynon

답변:


389

기본 조회 플래그를 덮어 썼습니다. 새 플래그를 지정하면 속성을 찾을 수 있도록 모든 정보를 제공해야합니다. 예를 들면 다음과 같습니다.BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance


7
누구든지 이것이 왜 이런 식인지 알 수 있습니다 (지식을 요구합니다).
Shrivallabh

2
@Shrivallabh BindingFlags.Public | BindingFlags.Instance은 전용 속성 이름을 제공 기본 플래그입니다
Otabek Kholikov을

1
@Shrivallabh OtabekKholikov의 설명에 추가 할 경우, 이러한 기본값을 유지하고 지정한 값을 추가 (또는) BindingFlags하는 경우 기본값을 사용하지 않는 방법은 없습니다. 즉, Public속성을 제외하거나 속성 을 제외 할 수 없습니다 Instance. 그들은 당신이 기본값을 취하거나 당신이 무엇을했는지 정확하게 지정하여 재정의하기로 결정했습니다.
xr280xr

36

당신은 추가해야합니다 BindingFlags.Public | BindingFlags.Instance


2
더 적은 투표권을 얻었지만 2 분 더 빨랐습니다. 그러나 다시 Pop의 답변에 자세한 내용이 있습니다. 나는 자격이있는 모든 사람에게 투표를한다! :)
Tony Basallo

10

고마워요, 오늘 정말 도움이되었습니다. 감사 정보가 저장되었지만 속성 이름에 대 / 소문자가 잘못되었습니다. (감사는 데이터 계층에 내장되어 있습니다.) 어쨌든 IgnoreCase를 바인딩 플래그로 추가해야했지만 동료가이 답변을 찾을 때까지 여전히 작동하지 않았습니다. 결과 기능 :

public static void SetProperty(Object R, string propertyName, object value)
{
    Type type = R.GetType();
    object result;
    result = type.InvokeMember(
        propertyName, 
        BindingFlags.SetProperty | 
        BindingFlags.IgnoreCase | 
        BindingFlags.Public | 
        BindingFlags.Instance, 
        null, 
        R, 
        new object[] { value });
}

이것은 내가 DotMagic이라고 부르는 클래스의 일부입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.