반응형
리플렉션을 통해 nullable 속성 유형 찾기
리플렉션을 통해 객체의 속성을 검사하고 각 속성의 데이터 유형을 계속 처리합니다. 다음은 내 (축소 된) 출처입니다.
private void ExamineObject(object o)
{
Type type = default(Type);
Type propertyType = default(Type);
PropertyInfo[] propertyInfo = null;
type = o.GetType();
propertyInfo = type.GetProperties(BindingFlags.GetProperty |
BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Instance);
// Loop over all properties
for (int propertyInfoIndex = 0; propertyInfoIndex <= propertyInfo.Length - 1; propertyInfoIndex++)
{
propertyType = propertyInfo[propertyInfoIndex].PropertyType;
}
}
내 문제는 새로 nullable 속성을 처리해야하지만 nullable 속성의 유형을 얻는 방법에 대한 단서가 없다는 것입니다.
가능한 해결책:
propertyType = propertyInfo[propertyInfoIndex].PropertyType;
if (propertyType.IsGenericType &&
propertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
{
propertyType = propertyType.GetGenericArguments()[0];
}
Nullable.GetUnderlyingType(fi.FieldType)
원하는 작업을 수행하기 위해 아래 코드를 확인하십시오.
System.Reflection.FieldInfo[] fieldsInfos = typeof(NullWeAre).GetFields();
foreach (System.Reflection.FieldInfo fi in fieldsInfos)
{
if (fi.FieldType.IsGenericType
&& fi.FieldType.GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
// We are dealing with a generic type that is nullable
Console.WriteLine("Name: {0}, Type: {1}", fi.Name, Nullable.GetUnderlyingType(fi.FieldType));
}
}
foreach (var info in typeof(T).GetProperties())
{
var type = info.PropertyType;
var underlyingType = Nullable.GetUnderlyingType(type);
var returnType = underlyingType ?? type;
}
이 방법은 쉽고 빠르며 안전합니다.
public static class PropertyInfoExtension {
public static bool IsNullableProperty(this PropertyInfo propertyInfo)
=> propertyInfo.PropertyType.Name.IndexOf("Nullable`", StringComparison.Ordinal) > -1;
}
속성 유형을 가져 오기 위해 모든 클래스 속성을 통과하는 루프를 사용하고 있습니다. 다음 코드를 사용합니다.
public Dictionary<string, string> GetClassFields(TEntity obj)
{
Dictionary<string, string> dctClassFields = new Dictionary<string, string>();
foreach (PropertyInfo property in obj.GetType().GetProperties())
{
if (property.PropertyType.IsGenericType && property.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>) && property.PropertyType.GetGenericArguments().Length > 0)
dctClassFields.Add(property.Name, property.PropertyType.GetGenericArguments()[0].FullName);
else
dctClassFields.Add(property.Name, property.PropertyType.FullName);
}
return dctClassFields;
}
참고 URL : https://stackoverflow.com/questions/5644587/find-type-of-nullable-properties-via-reflection
반응형
'programing tip' 카테고리의 다른 글
jQuery의 정규식 필드 유효성 검사 (0) | 2020.10.21 |
---|---|
유니 코드 문자열을 이스케이프 된 ASCII 문자열로 변환 (0) | 2020.10.21 |
배치 파일에서 콘솔의 입력을 읽는 방법은 무엇입니까? (0) | 2020.10.21 |
스크립트에 대한 부울 인수 (0) | 2020.10.21 |
SQL에서 정수 열 값을 1 씩 증가시키는 방법 (0) | 2020.10.21 |