2010-08-11 13 views
18

Quiero crear una clase estática que cargue algunas configuraciones del archivo XML y aplique esas configuraciones a sus propias propiedades.Estableciendo propiedades con reflejo en las clases estáticas

Intento utilizar el siguiente código pero realmente no sé qué dar al método SetValue ya que la clase para la que queremos establecer la propiedad es estática.

// some code removed ... 
Type settingsType = typeof(Settings); // Settings is a static class 

foreach (PropertyInfo propertyInformation in settingsType.GetProperties(BindingFlags.Public | 
            BindingFlags.Static)) 
{ 
     //------------------------------------------------------------ 
     // Determine if configured setting matches current setting based on name 
     //------------------------------------------------------------ 
     if (propertyInformation.Name.Equals(name, StringComparison.OrdinalIgnoreCase)) 
     { 
     //------------------------------------------------------------ 
     // Attempt to apply configured setting 
     //------------------------------------------------------------ 
     try 
     { 
     if (propertyInformation.CanWrite) 
     { 
     propertyInformation.SetValue(this, Convert.ChangeType(value, propertyInformation.PropertyType, CultureInfo.CurrentCulture), null); 
     } 
     } 
     catch 
     { 
     } 
      break; 
     } 

}

¿Es incluso posible establecer las propiedades de clases estáticas con la reflexión?

+0

'Configuración' es **' configuración de clase parcial sellada interna' **? –

Respuesta

30

Solo pase null para la instancia.

+2

usando "typeof (Configuraciones)" en lugar de "esto" también funciona – mare

+0

@mare: Quizás se ignore para miembros estáticos. – leppie

+0

Según la documentación, se ignora para que pueda pasar cualquier cosa. Para la legibilidad, generalmente lo llamamos así: '' ' prop.SetValue (" ThisArgumentIsIgnoredForStaticMethods ", value); '' ' –

Cuestiones relacionadas