özelliğini içeren sınıf jenerik ise Mümkün, ve jenerik parametresini kullanarak mal beyanında:
class Foo<TValue> {
public string Value { get; set; }
public TValue TypedValue {
get {
return (TValue)Convert.ChangeType(Value, typeof(TValue));
}
}
}
Alternatif yerine genel bir yöntemi kullanmak olacaktır:
class Foo {
public string Value { get; set; }
public Type TheType { get; set; }
public T CastValue<T>() {
return (T)Convert.ChangeType(Value, typeof(T));
}
}
Bir sınıfın kendi dönüştürücüsünü tanımlamasına izin verdiğinden, dönüştürmek için System.ComponentModel.TypeConverter
sınıflarını da kullanabilirsiniz.
Düzenleme:
Foo foo = new Foo();
foo.Value = "100";
foo.Type = typeof(int);
int c = foo.CastValue<int>();
derleme zaman türünü bilmek zorunda: generic yöntemi çağrılırken derleyici bunu anlaması için bir yol vardır çünkü, sen genel tür parametre belirtmelisiniz unutmayın . Derleme zamanında türünü bilmiyorsanız o zaman bu durumda Foo
sınıfa aşağıdaki özelliği ekleyebilir, bir object
saklayarak olmalıdır:
public object ConvertedValue {
get {
return Convert.ChangeType(Value, Type);
}
}
Genel özellikler güzel olurdu; Sanırım, var val = obj.Prop ', tür tabanlı bir arama için, daha kolay 'obj.Prop [typeof (Type)]' veya 'obj.GetProp ()'. –
Dan