Il est possible que si la classe contenant la propriété est générique, et vous déclarez la propriété à l'aide du paramètre générique:
class Foo<TValue> {
public string Value { get; set; }
public TValue TypedValue {
get {
return (TValue)Convert.ChangeType(Value, typeof(TValue));
}
}
}
Une alternative serait d'utiliser une méthode générique à la place:
class Foo {
public string Value { get; set; }
public Type TheType { get; set; }
public T CastValue<T>() {
return (T)Convert.ChangeType(Value, typeof(T));
}
}
Vous pouvez également utiliser les classes System.ComponentModel.TypeConverter
pour convertir, car elles permettent à une classe de définir son propre convertisseur.
Modifier: Notez que lorsque vous appelez la méthode générique, vous devez spécifier le paramètre de type générique, car le compilateur n'a aucun moyen de le déduire:
Foo foo = new Foo();
foo.Value = "100";
foo.Type = typeof(int);
int c = foo.CastValue<int>();
Vous devez connaître le type à la compilation . Si vous ne connaissez pas le type au moment de la compilation, vous devez être le stocker dans un object
, auquel cas vous pouvez ajouter la propriété suivante à la classe Foo
:
public object ConvertedValue {
get {
return Convert.ChangeType(Value, Type);
}
}
Les propriétés génériques seraient bien; Je pense que 'var val = obj.Prop' est plus succinct pour une recherche basée sur le type que 'obj.Prop [typeof (Type)]' ou 'obj.GetProp ()'. –
Dan