如何尝试将string转换为Guid

我没有findGuid的TryParse方法。 我想知道其他人如何处理将string格式的guid转换为guidtypes。

Guid Id; try { Id = new Guid(Request.QueryString["id"]); } catch { Id = Guid.Empty; } 
 new Guid(string) 

你也可以看看使用TypeConverter

使用这样的代码:

 new Guid("9D2B0228-4D0D-4C23-8B49-01A698857709") 

而不是“9D2B0228-4D0D-4C23-8B49-01A698857709”,你可以设置你的string值

这会让你非常接近,而且我在生产中使用它,并且从来没有发生过碰撞。 但是,如果您查看reflection器中的guid的构造函数,您将看到它所做的所有检查。

  public static bool GuidTryParse(string s, out Guid result) { if (!String.IsNullOrEmpty(s) && guidRegEx.IsMatch(s)) { result = new Guid(s); return true; } result = default(Guid); return false; } static Regex guidRegEx = new Regex("^[A-Fa-f0-9]{32}$|" + "^({|\\()?[A-Fa-f0-9]{8}-([A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12}(}|\\))?$|" + "^({)?[0xA-Fa-f0-9]{3,10}(, {0,1}[0xA-Fa-f0-9]{3,6}){2}, {0,1}({)([0xA-Fa-f0-9]{3,4}, {0,1}){7}[0xA-Fa-f0-9]{3,4}(}})$", RegexOptions.Compiled); 

不幸的是,没有相同的TryParse()。 如果您创build一个System.Guid的新实例并传入string值,则可以捕获三个可能的exception,如果该exception无效。

那些是:

  • ArgumentNullException
  • 出现FormatException
  • 发生OverflowException

我已经看到了一些实现,你可以在创build实例之前对string进行正则expression式,如果你只是想validation它而不创build它。

如果你想要的只是一些非常基本的错误检查,你可以检查string的长度。

  string guidStr = ""; if( guidStr.Length == Guid.Empty.ToString().Length ) Guid g = new Guid( guidStr );