2012-01-15 1 views
2

리플렉션을 사용하여 getset 메서드가 모두있는 속성 만 검색하고 get 인 속성은 무시합니다. 내가하려는 것은 사용자가 변경할 수있는 변수의 목록을 제공하는 것이므로 get 메서드 만있는 속성을 표시하는 것은 잘못된 결정입니다.리플렉션을 사용하여 PropertyInfo를 가져오고, 변경자가있는 접근 자만보고 싶습니다.

아래의 코드에서 사용자는 Name으로 표시됩니다. 또는 두 가지를 모두 보여줄 수도 있지만 회색으로 바뀌면 UniqueID이 회색으로 바뀌어 변경할 수 없다는 것을 알고 있습니다.

public Int64 UniqueID 
{ 
    get { return this.uniqueID; } 
} 

public String Name 
{ 
    get { return this.name; } 
    set { this.name = value; } 
} 

배경 정보 : C# 4.0을 사용하고 있습니다.

답변

4

당신은 CanReadCanWrite 속성을 사용할 수 있습니다 :

Type type = ... 
var readWriteProps = type.GetProperties() 
         .Where(p => p.CanRead && p.CanWrite); 

는 위의 쿼리는 공공 접근 공공 속성 만 보이는 점에 유의 마십시오.

+0

이 좋은 작품 감사합니다. 나는 당신에게 투표를 하겠지만, 그렇게 하기엔 충분한 담당자가 없습니다. –

3

난 당신이 찾고있는 속성이 PropertyInfo.CanWrite 생각이 체크를 모두 취득과 같은으로 설정하려면 다음과 같이 구현할 수 있습니다,

if (propInfo.CanWrite && propInfo.CanRead) 
관련 문제