Так не получается, потому что так можно приводить только к типам, известным во время компиляции.
Вам может помочь тип dynamic
. Однако вы должны знать, какие операции поддерживает объект. Небольшой пример:
class Program
{
static void Main(string[] args)
{
dynamic fooValue = Foo(); // тип возвращаемого значения заранее неизвестен
Console.WriteLine(fooValue.Length); // выводит 5
dynamic barValue = Bar(); // тип возвращаемого значения заранее неизвестен
Console.WriteLine(barValue.R); // выводит 255
}
private static object Foo()
{
return "Hello";
}
private static object Bar()
{
return Color.White;
}
}
Также вы можете возспользоваться рефлексией и запрашивать/устанавливать нужные поля/свойства/вызывать методы сперва получая ссылку на них с помощью Type.GetField()
/Type.GetProperty()
/Type.GetMethod()
, а затем работая с помощью FieldInfo
/PropertyInfo
.GetValue()
/SetValue()
и MethodInfo.Invoke()
(что менее удобно, конечно).