반응형
PropertyInfo가 컬렉션인지 확인하는 방법
다음은 IsDirty 검사를 위해 클래스에 있는 모든 공용 속성의 초기 상태를 가져오는 데 사용하는 몇 가지 코드입니다.
속성이 IEnumerable인지 확인하는 가장 쉬운 방법은 무엇입니까?
건배,
베릴
protected virtual Dictionary<string, object> _GetPropertyValues()
{
return _getPublicPropertiesWithSetters()
.ToDictionary(pi => pi.Name, pi => pi.GetValue(this, null));
}
private IEnumerable<PropertyInfo> _getPublicPropertiesWithSetters()
{
return GetType().GetProperties().Where(pi => pi.CanWrite);
}
업데이트
내가 한 일은 다음과 같이 몇 가지 라이브러리 확장을 추가하는 것이 었습니다.
public static bool IsNonStringEnumerable(this PropertyInfo pi) {
return pi != null && pi.PropertyType.IsNonStringEnumerable();
}
public static bool IsNonStringEnumerable(this object instance) {
return instance != null && instance.GetType().IsNonStringEnumerable();
}
public static bool IsNonStringEnumerable(this Type type) {
if (type == null || type == typeof(string))
return false;
return typeof(IEnumerable).IsAssignableFrom(type);
}
if ( typeof( IEnumerable ).IsAssignableFrom( pi.PropertyType ) )
나는 Fyodor Soikin에 동의하지만 문자열도 Enumerable이고 문자를 하나씩 반환하기 때문에 Enumerable이라는 사실이 그것이 Collection일 뿐이라는 의미는 아닙니다...
그래서 나는 사용하는 것이 좋습니다
if (typeof(ICollection<>).IsAssignableFrom(pi.PropertyType))
노력하다
private bool IsEnumerable(PropertyInfo pi)
{
return pi.PropertyType.IsSubclassOf(typeof(IEnumerable));
}
ReferenceURL : https://stackoverflow.com/questions/3569811/how-to-know-if-a-propertyinfo-is-a-collection
반응형
'IT이야기' 카테고리의 다른 글
사람들이 Spring MVC에서 XSS를 수행하는 것 방지 방법 (0) | 2021.10.22 |
---|---|
libc 없이 컴파일 (0) | 2021.10.22 |
만료된 Facebook OAuth2 액세스 토큰을 새로 고치는 올바른 방법 (0) | 2021.10.21 |
사용자에게 POST 데이터를 다시 보내라는 메시지를 표시하지 않고 POST 후 브라우저 창 다시 로드 (0) | 2021.10.21 |
Symfony 2 : 다중 및 동적 데이터베이스 연결 (0) | 2021.10.21 |