Кастинг с использованием System.Type - c # - PullRequest
12 голосов
/ 09 декабря 2011

Можно ли привести объект к нужному типу, используя System.Type? в качестве ссылки?

У меня был поиск, и общее согласие было нет, хотя я надеялся, что в C # 4.0 могут быть введены некоторые вспомогательные средства, которые могут мне помочь.

т.е. ниже не будет работать, но псевдокод это то, что я хотел бы.

object o = null;
var t = typeof(string);
...
string foo = (t)o;

Редактировать: мне нужно использовать XmlSerializer, чтобы восстановить / десериализовать в тип, хранящийся в t

Ответы [ 4 ]

17 голосов
/ 09 декабря 2011

Посмотрите на:

var foo = Convert.ChangeType(o, typeof(string))
3 голосов
/ 09 декабря 2011

Это не имеет смысла.

Приведение не меняет объект вообще;он просто позволяет использовать объект в качестве заданного типа во время компиляции .
Если вы не знаете, к какому типу вы приводите его к во время компиляции ,приведение бесполезно, поскольку оно не позволит вам ничего сделать с приведенным выражением.

1 голос
/ 09 декабря 2011

Нет необходимости кастовать.Объект не меняется, ваш тип ссылок (переменных) меняется при «приведении».

0 голосов
/ 09 декабря 2011

Полагаю, вы ищете что-то вроде System.ChangeType () . Это работает, если тип реализует IConvertible , и если он конвертируется в нужный тип (конечно, это не приведение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...