Допустимая строка 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
,
Представьте себе разницу между чтением рецепта из кулинарной книги для приготовления еды и попыткой превратить саму кулинарную книгу в обед.