2010-02-16 5 views
1

일부 코드 :개체 속성의 기본값을 가져 오는 방법은 무엇입니까?

foreach (System.Reflection.PropertyInfo pi in myObject.GetType().GetProperties()) 
{ 
    if (pi.CanWrite) 
    { 
     object value = pi.GetValue(Properties, null); 

     // if (value is not default) 
     // { 
     X.addAttribute(pi.Name, value); 
     // } 
    } 
} 

난 할 노력하고있어 것은 재산이 된 DefaultValue에있는 경우 라인 'X.addAttribute을 ...'- 호출 할 수 있습니다. 나는 비교를 할 수 있도록 속성의 DefaultValue를 얻는 방법이 있다고 가정합니다.

내 목적으로 DefaultValueAttribute에 정의 된대로 'default'값을 얻으려고합니다.

도움을 주시면 감사하겠습니다.

+0

답변은 "기본값"을 정의하는 방법에 따라 달라집니다. 두 가지 명백한 정의는 CLR-Default (참조 유형의 경우 null, 값 유형의 경우 0) 또는 DefaultValueAttribute입니다. 관심있는 내용을 명확히하기 위해 질문을 편집 할 수 있습니까? –

+0

안녕하세요, 사과드립니다. 나는 지정 했어야했다. DefaultValueAttribute를 통해 정의 된대로 기본값입니다. – Wex

답변

3

를 사용합니다.

+0

건배. 이것은 내 목적에 필요한 정보의 비트입니다. – Wex

-3

먼저 필드를 항상 기본값으로 원하는 값으로 초기화해야합니다.

비슷한

class UnitManager 
    { 
     private int value; 

     [DefaultValue("0")] 
     public int Value 
     { 
     get { return this.value; } 
     set { this.value = value; } 
     } 
    } 

그런 다음 단순히 당신의의 DefaultValue 속성을 얻을 귀하의 PropertyInfo 객체에 GetCustomAttributes를 사용하려는 가정

UnitManager manager = new UnitManager() 

    int startValue = manager.Value; 
4

다음은 기본값 인 런타임 유형을 얻는 데 사용하는 방법입니다. 값이없는 유형의 경우 'null'을 반환하고, 그렇지 않으면 기본 값 유형을 반환합니다 (여분의 perf 유형에 대한 값 유형 캐싱 포함).) :

private static readonly Dictionary<Type, object> DefaultValueTypes 
    = new Dictionary<Type, object>(); 

public static object GetDefaultValue(Type type) 
{ 
    if (!type.IsValueType) return null; 

    object defaultValue; 
    lock (DefaultValueTypes) 
    { 
     if (!DefaultValueTypes.TryGetValue(type, out defaultValue)) 
     { 
      defaultValue = Activator.CreateInstance(type); 
      DefaultValueTypes[type] = defaultValue; 
     } 
    } 

    return defaultValue; 
} 
+0

고마워,하지만 내 시스템은 일부 비 가치 유형을 사용합니다. 이것은 어쨌든 가질 수있는 유용한 코드입니다. :) – Wex

+0

또한, 컴파일 타임에 유형을 알고있는 경우,'default' 키워드를 사용할 수 있습니다. –

+0

내가 찾던 바로 그 것이었다! 감사! –

관련 문제