2012-01-27 2 views
3

У меня есть эти данные, которые могут быть очень большими по размеру, это может быть xmlstring, dataset, datatable, datarowcollection. Эти данные будут переданы в общий метод вместе с его типом.Does Convert.ChangeType() создает копию объекта или возвращает ссылку на исходный объект?

void GenericMethod(object data, Type t) 
{ 
    var d = Convert.ChangeType(data, t); 
    //some tasks to do 
} 

Вопрос: если данные 1GB, будет ли ChangeType создавать еще один объект с 1 ГБ? Я просто хочу быть уверенным, из-за использования памяти.

ответ

3

Convert.ChangeType вызывает реализацию экземпляра IConvertible, которая может свободно выполнять все, что захочет.

Если переданный объект не реализует IConvertible, генерируется исключение.

+0

Уверены ли вы? Пример реализации IConvertable на MSDN вызывает Convert.ChangeType. Это, в свою очередь, вызывает IConvertable для изменяемого типа? http://msdn.microsoft.com/en-us/library/system.iconvertible.aspx –

+0

@EricJ .: Он вызывает 'ChangeType()' на 'double', а не на себя. – SLaks

+0

означает ли это, что никакая копия не была создана, если исключение не выбрасывается? – jerjer

Смежные вопросы