Ответ 1
newObjectType
- экземпляр класса Type
(содержащий метаданные о типе), а не сам тип.
Это должно работать
var newObject = givenObject as MyClass;
ИЛИ
var newObject = (MyClass) givenObject;
Приведение к экземпляру типа действительно не имеет смысла, поскольку время компиляции должно знать, какой тип переменной должен быть в то время, когда экземпляр типа представляет собой концепцию времени выполнения,
Единственный способ var
может работать, так как тип переменной известен во время компиляции.
UPDATE
Кастинг обычно представляет собой концепцию времени компиляции, т.е. вы должны знать тип во время компиляции.
Преобразование типов - это концепция времени выполнения.
ОБНОВЛЕНИЕ 2
Если вам нужно сделать вызов, используя переменную типа, и вы не знаете тип во время компиляции, вы можете использовать отражение: использовать Invoke
метод MethodInfo
on экземпляр типа.
object myString = "Ali";
Type type = myString.GetType();
MethodInfo methodInfo = type.GetMethods().Where(m=>m.Name == "ToUpper").First();
object invoked = methodInfo.Invoke(myString, null);
Console.WriteLine(invoked);
Console.ReadLine();