有效的 GUID 字符串给出了从 'System.String' 到 'System.Guid' 的无效转换

Valid GUID string gives Invalid cast from 'System.String' to '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 在第二次解析时失败,因此无法真正更改实现,只能更改我的输入。

Guid.Parse 获取一个字符串并将字符串值解释为 Guid 对象。 Convert.ChangeType 尝试直接将字符串实例本身更改为 Guid.

想象一下从食谱中阅读食谱做饭和尝试将食谱本身变成晚餐之间的区别。