Jest to kontynuacja this question na temat konwersji wartości z odbiciem. Konwersja obiektu określonego typu na inny typ można zrobić tak:Sprawdź, czy Convert.ChangeType będzie działać między dwoma typami:
object convertedValue = Convert.ChangeType(value, targetType);
Biorąc pod uwagę dwa przypadki Type (słownie FromType i ToType), czy jest jakiś sposób, aby sprawdzić, czy konwersja uda?
E.g. mogę napisać taką metodę rozszerzenia:
public static class TypeExtensions
{
public static bool CanChangeType(this Type fromType, Type toType)
{
// what to put here?
}
}
EDYCJA: Właśnie to mam teraz. Brzydki, ale nie widzę jeszcze inny sposób ...
bool CanChangeType(Type sourceType, Type targetType)
{
try
{
var instanceOfSourceType = Activator.CreateInstance(sourceType);
Convert.ChangeType(instanceOfSourceType, targetType);
return true; // OK, it can be converted
}
catch (Exception ex)
{
return false;
}
tak, chciałbym metodę Convert.TryChangeType ... –
@Thomas: byłoby miło, ale nie jest to dokładnie to, czego potrzebuję tutaj. Nie mam jeszcze instancji typu fromType, tylko typ. – jeroenh
Myślę, że wszystko, co możesz sprawdzić w wiarygodny sposób, to fakt, że fromType implementuje 'IConvertible', ale to nie gwarantuje, że każda próba konwersji się powiedzie. – LukeH