在C#.NET中无法将字符串转换为GUID

42

为什么强制类型转换到 System.Guid 类型的语句会无效(try 块中的第二行)?

比如,假设我有一个字符串,其值为“5DD52908-34FF-44F8-99B9-0038AFEFDB81”。我想将其转换为 GUID。这不可能吗?

    Guid ownerIdGuid = Guid.Empty;
    try
    {
        string ownerId = CallContextData.Current.Principal.Identity.UserId.ToString();
        ownerIdGuid = (Guid)ownerId;
    }
    catch
    {
        // Implement catch
    }

1
请不要将其他用户的答案剪切粘贴到其他用户的帖子中。只需标记为已接受并可选择点赞即可。这就是所需的全部内容。 - Kev
我并没有这样做。我只是从这个评论中得到了答案:@Mr. MacGyver: Guid.Parse() 是 .NET 4,你应该能够在 .NET 2.0 中使用 ownerIdGuid = new Guid(ownerId) .....碰巧 Kiley 几乎在那个评论发表的同时回答了同样的问题。所以这只是巧合……我在 Visual Studio 中有完全相同的代码,所以看起来是这样的。 - Entree
BrokenGlasses的编辑历史记录显示你将Kiley的答案编辑进去了。 - Kev
可能存在一个错误...在我编辑了Broken Glass的答案后,我将其标记为答案。然后向下滚动,阅读了Kiley的评论,然后点击了“最旧”的选项卡。然后发现Kiley的是最旧的,将其标记为答案。然后添加了一条评论。看看你能否重现它。也许在选项卡之间切换时混淆了我编辑的答案的索引? - Entree
那么谁编辑了什么? - Cloud
显示剩余9条评论
6个回答

65

试试这个:

Guid ownerIdGuid = Guid.Empty;            
try
{
    string ownerId = CallContextData.Current.Principal.Identity.UserId.ToString();
    ownerIdGuid = new Guid(ownerId);
}
catch
{
    // implement catch 
}

无法隐式将类型为“string”的值转换为类型为“System.Guid”的值。 - Entree
我没有及时看到你的编辑。 :-) 但是我还是给了你+1。 - Entree
1
我对SO还有点陌生,可能不太清楚所有的操作方式,但你把我的答案复制粘贴到了别人的答案里,并将其标记为正确答案...我很感谢你的赞同,但这似乎有点不公平。:( - Kiley Naro
是的,你说得对。我甚至没有意识到 Stack Overflow 上有一个“最古老”的选项卡..看起来你赢了他。 - Entree
1
@Kiley:不用担心,欢迎来到SO,这并不是什么大事。 - BrokenGlass
显示剩余2条评论

25

试试这个:

ownerIdGuid = Guid.Parse(ownerId);

ownerId 是一个字符串,你不能直接将其转换为 Guid


System.Guid没有包含解析的定义。 - Entree
2
@Mr. MacGyver:你正在使用哪个.NET版本? - BrokenGlass
将 GUID 的字符串表示形式转换为等效的 Guid 结构。 - Baz1nga
3
@Mr. MacGyver:Guid.Parse() 是 .NET 4 中的内容,你可以在 .NET 2.0 中使用 ownerIdGuid = new Guid(ownerId) - BrokenGlass
我看到它只在4.0上可用。不知道为什么.ToString()无法工作? - Entree
Kiley先回答了。必须遵守规则。毕竟我是麦克盖尔。 - Entree

7
你不能直接从 string 类型转换为 Guid 类型。而应该使用以下两种方法之一:
  1. Guid.Parse(格式无效时抛出 FormatException 异常);或者
  2. Guid.TryParse(格式无效时返回 false)

2
这只适用于.NET 4.0,但是答案加一分。 - Entree

5
尝试以下方法之一:
Guid.Parse
Guid.TryParse
Gruid.TryParseExact

在.NET 4.0(或3.5)中。

关于您的评论“在.NET 4.0(或3.5)中”,.NET 3.5要求您首先实例化一个Guid(根据@Kiley的答案)。我刚刚向我的问题添加了“.NET-3.5”标签,以便读者清楚。您的答案在.NET 4.0框架中运行良好,但在.NET 4.0框架中才能正常工作。此外,“Gruid.TryParseExact”应该是“Guid.TryParseExact”吗?我不知道那个..感谢您的发布。 - Entree

2

您需要使用Guid.Parse将字符串转换为Guid


我在下面的代码中注释了我遇到的错误。 - Entree
1
+1 表示 .NET Framework 版本 4.0。 - Entree

0

System.Guid x = new System.Guid("5DD52908-34FF-44F8-99B9-0038AFEFDB81") 可以正常工作并回答了问题。

(我知道这是一个旧帖子)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接