Допустимая строка GUID дает неверное приведение из 'System.String' к 'System.Guid'

Я запускаю следующий код:

var guidStr = "C105534D-E001-46F1-874A-322E5E0E132C";
var guid1 = Guid.Parse(guidStr);
var guid2 = Convert.ChangeType(guidStr, typeof(Guid));
Console.WriteLine(guid1 + " " + guid2);

И пока guid1 получает значение просто отлично, guid2 строка выдает исключение:

Invalid cast from 'System.String' to 'System.Guid'.
at System.Convert.DefaultToType(IConvertible value, Type targetType, IFormatProvider provider)
at System.String.System.IConvertible.ToType(Type type, IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType)

В чем разница?

К сожалению я пользуюсь данным dll это терпит неудачу при втором анализе, поэтому не может реально изменить реализацию, только мой вклад.

1 ответ

Решение

Guid.Parse принимает строку и интерпретирует значение строки в Guid объект. Convert.ChangeType пытается напрямую изменить само строковое значение в Guid,

Представьте себе разницу между чтением рецепта из кулинарной книги для приготовления еды и попыткой превратить саму кулинарную книгу в обед.

Другие вопросы по тегам