【问题标题】:Valid GUID string gives Invalid cast from 'System.String' to 'System.Guid'有效的 GUID 字符串提供了从“System.String”到“System.Guid”的无效转换
【发布时间】:2017-01-08 05:59:38
【问题描述】:

我正在运行以下代码:

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 在第二次解析时失败,因此无法真正更改实现,只有我的输入。

【问题讨论】:

  • 不幸的是,String(从Convert.ChangeType 调用)的IConvertible.ToType 实现委托给不支持StringGuid 的通用转换函数(DefaultToType)。您将无法为此使用 Convert

标签: c# guid typeconverter iconvertible changetype


【解决方案1】:

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

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

【讨论】:

  • 我可以对输入做些什么来使这个调用成功?
  • @Mugen 你有什么意见?您需要使用程序的哪些部分,您可以控制哪些部分?
  • 我有一个模块,它在 csv 文件中获取输入并使用此功能将其导入 TSQL DB,在读取文件时,每个元素都从 String 转换为匹配的 SQL 类型,在这种情况下Guid (uniqueidentifier)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 2016-03-10
相关资源
最近更新 更多