Objektindexer um auf die Werte der einzelnen propertys der jeweiligen Objektinstanz mittels dem Namen zuzugreifen und diese zu setzen.
Die Methode setPropertyValue(PropertyInfo propertyInfo, object valueToSet)ist dafür zuständig den jeweilig übergebenen Wert in den Datentyp der property zu konvertieren.
/// <summary>
/// Property indexer
/// </summary>
public virtual object this[string key]
{
get
{
PropertyInfo info = this.GetType().GetProperty(key);
if (info == null)
return null;
return info.GetValue(this, null);
}
set
{
PropertyInfo info = this.GetType().GetProperty(key);
if (info != null)
this.setPropertyValue(info, value);
}
}
/// <summary>
/// Sets the property value.
/// </summary>
/// <param name="propertyInfo">The property info.</param>
/// <param name="valueToSet">The value to set.</param>
private void setPropertyValue(PropertyInfo propertyInfo, object valueToSet)
{
var targetType = propertyInfo.PropertyType.IsGenericType && propertyInfo.PropertyType.GetGenericTypeDefinition().Equals(typeof(System.Nullable<>)) ? Nullable.GetUnderlyingType(propertyInfo.PropertyType) : propertyInfo.PropertyType;
var convertedValue = Convert.ChangeType(valueToSet, targetType);
propertyInfo.SetValue(this, convertedValue, null);
}
Kommentare zum Snippet