【发布时间】:2010-09-25 21:59:18
【问题描述】:
我没有找到 Guid 的 TryParse 方法。我想知道其他人如何处理将字符串格式的 guid 转换为 guid 类型。
Guid Id;
try
{
Id = new Guid(Request.QueryString["id"]);
}
catch
{
Id = Guid.Empty;
}
【问题讨论】:
标签: c#
我没有找到 Guid 的 TryParse 方法。我想知道其他人如何处理将字符串格式的 guid 转换为 guid 类型。
Guid Id;
try
{
Id = new Guid(Request.QueryString["id"]);
}
catch
{
Id = Guid.Empty;
}
【问题讨论】:
标签: c#
new Guid(string)
您也可以使用TypeConverter。
【讨论】:
TryParse() 或TryParseExact()。如果您提供无效的 Guid,则在尝试以比较或类似方式访问它时会出现以下异常: FormatException: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
不幸的是,没有等效的 TryParse()。如果您创建一个 System.Guid 的新实例并传入字符串值,您可以捕获它在无效时抛出的三个可能的异常。
这些是:
我已经看到了一些实现,如果您只是想验证它而不是创建它,您可以在创建实例之前对字符串执行正则表达式。
【讨论】:
这会让你非常接近,我在生产中使用它并且从未发生过碰撞。但是,如果您查看反射器中 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);
【讨论】:
如果你想要的只是一些非常基本的错误检查,你可以只检查字符串的长度。
string guidStr = "";
if( guidStr.Length == Guid.Empty.ToString().Length )
Guid g = new Guid( guidStr );
【讨论】:
Guid.TryParse()
https://msdn.microsoft.com/de-de/library/system.guid.tryparse(v=vs.110).aspx
或
Guid.TryParseExact()
https://msdn.microsoft.com/de-de/library/system.guid.tryparseexact(v=vs.110).aspx
在 .NET 4.0(或 3.5?)中
【讨论】:
使用这样的代码:
new Guid("9D2B0228-4D0D-4C23-8B49-01A698857709")
您可以设置字符串值,而不是“9D2B0228-4D0D-4C23-8B49-01A698857709”
【讨论】: