1

我正在运行以下代码:

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在第二次解析时失败,所以不能真正改变实现,只有我的输入。

4

1 回答 1

10

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

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

于 2017-01-08T06:06:29.490 回答