속성을 포함하는 클래스가 일반적인 경우, 그것은 가능합니다, 당신은 일반 매개 변수를 사용하여 속성을 선언 :
class Foo<TValue> {
public string Value { get; set; }
public TValue TypedValue {
get {
return (TValue)Convert.ChangeType(Value, typeof(TValue));
}
}
}
대안 대신 일반적인 방법을 사용하는 것입니다 :
class Foo {
public string Value { get; set; }
public Type TheType { get; set; }
public T CastValue<T>() {
return (T)Convert.ChangeType(Value, typeof(T));
}
}
을 System.ComponentModel.TypeConverter
클래스를 사용하면 클래스에서 자체 변환기를 정의 할 수 있으므로 변환 할 수 있습니다.
편집 :
Foo foo = new Foo();
foo.Value = "100";
foo.Type = typeof(int);
int c = foo.CastValue<int>();
당신은 컴파일 타임에 유형을 알고있다 : 일반 메서드를 호출 할 때 컴파일러가 추론 할 방법이 없기 때문에, 당신은 제네릭 형식 매개 변수를 지정해야합니다 . 당신이 컴파일시에 유형을 모르는 경우에 당신은 어떤 경우에 당신은 Foo
클래스에 다음 속성을 추가 할 수 object
에 저장해야합니다 :
public object ConvertedValue {
get {
return Convert.ChangeType(Value, Type);
}
}
일반 속성이 좋을 것입니다. 나는'var val = obj.Prop'이'obj.Prop [typeof] (type)]'또는'obj.GetProp ()'보다 타입 기반 룩업에 더 간결하다고 생각합니다. –
Dan