如何将字符串转换为GUID

3

我需要将一个String类型的变量转换为Guid类型。

我正在使用下面这段代码,但是:

string myUserIdContent = ((Label)row.FindControl("uxUserIdDisplayer")).Text;
Guid myGuidUserId = new Guid(myUserIdContent); // PROBLEM HERE
MembershipUser mySelectedUser = Membership.GetUser(myGuidUserId);

我收到了这个错误

异常详细信息: System.FormatException: 无法识别的 Guid 格式.

应该怎么做才能得到正确结果?


4
当然,您可以更正格式... - John Saunders
使用GuidConverter类怎么样?你能给我一个例子吗? - GibboK
请发布您正在使用的确切字符串。 - Adam Maras
"9accaf71-fe30-48dd-b8a0-062459b4cdfc" 字符串 - GibboK
2
我无法仅通过您提供的字符串重现您的错误。在您的代码中设置断点,并确保 myUserIdContent 确实设置为您认为的值。 - Adam Maras
你展示给我们的字符串将可以很好地转换为Guid... 要么你没有真正获得那个字符串,要么其他什么地方失败了... - marc_s
2个回答

6
使用Guid.TryParse
      string myUserIdContent = ((Label)row.FindControl("uxUserIdDisplayer")).Text;
      Guid myGuidUserId;
      if (Guid.TryParse(myUserIdContent, out myGuidUserId)
      {
          MembershipUser mySelectedUser = Membership.GetUser(myGuidUserId);
      }
      else
      {
          // throw exception and/or inform user
      }

2
如果您知道GUID的格式是特定的,可以使用Guid.TryParseExact函数。 - Richard

2
根据异常信息,您的字符串格式不正确。根据MSDN文档:
包含GUID的字符串可以是以下格式之一(“d”表示忽略大小写的十六进制数字):
32个连续的数字:
dddddddddddddddddddddddddddddddd
或者:
8组、4组、4组、4组和12组数字,组与组之间用连字符分隔。整个GUID可以选择性地用匹配的大括号或圆括号括起来:
dddddddd-dddd-dddd-dddd-dddddddddddd
或者:
{dddddddd-dddd-dddd-dddd-dddddddddddd}
或者:
(dddddddd-dddd-dddd-dddd-dddddddddddd)
或者:
8组、4组和4组数字,以及八组由“0x”或“0X”前缀的两位数字子集,各组之间用逗号分隔。整个GUID以及子集都用匹配的大括号括起来:
{0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}}
所有大括号、逗号和“0x”前缀都是必需的。所有嵌入空格都将被忽略。组中的前导零都将被忽略。
组中显示的数字是该组中可能出现的最大有效数字数。您可以为组指定1到所示数字数之间的任意数字。指定的数字被假定为组中的低位数字。

Guid格式良好,我认为问题在于CAST。也许可以用Convert解决? - GibboK
请发布您正在使用的确切字符串。 - Adam Maras
9accaf71-fe30-48dd-b8a0-062459b4cdfc - GibboK

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