Jac*_*tti 49 c# asp.net guid tryparse
UPDATE
Guid.TryParse在.NET 4.0中可用
结束更新
显然,.NET CLR 2.0中没有公共GUID.TryParse().
所以,我正在寻找正则表达式[也称为google搜索一个],每次我发现其中有一个激烈的论点在评论部分关于RegEx A不起作用,使用RegEx B.然后有人会写Regex C yadda yadda
所以无论如何,我决定做的就是这个,但我对它感到很难过.
public static bool IsGuid (string possibleGuid) {
try {
Guid gid = new Guid(possibleGuid);
return true;
} catch (Exception ex) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
显然我并不喜欢这个,因为从第一天开始我一直在钻我,以避免抛出异常,如果你可以防范代码.
有谁知道为什么.NET Framework中没有公共的Guid.TryParse()?
有没有人有一个真正的正则表达式,适用于所有GUID?
Jar*_*Par 55
CLR 2.0及更早版本中没有Guid.TryParse.它将从CLR 4.0和Visual Studio 2010开始提供.
至于为什么没有.这些类型的问题通常很难正确回答.最有可能的是疏忽或时间限制问题.如果你在反射器中打开mscorlib,你会发现实际上有一个名为TryParse的方法,Guid
但它是私有的.它在某些情况下也会引发异常,因此它不是一个好的等价物Int32.TryParse
.
Par*_*ury 10
IsGuid实现为字符串的扩展方法...
public static bool IsGuid(this string stringValue)
{
string guidPattern = @"[a-fA-F0-9]{8}(\-[a-fA-F0-9]{4}){3}\-[a-fA-F0-9]{12}";
if(string.IsNullOrEmpty(stringValue))
return false;
Regex guidRegEx = new Regex(guidPattern);
return guidRegEx.IsMatch(stringValue);
}
Run Code Online (Sandbox Code Playgroud)
这种TryParse
针对Guids的实现使用try-catch来捕获畸形Guids.它作为扩展方法实现,必须放在静态类中:
public static bool TryParseGuid(this string s, out Guid guid)
{
try {
guid = new Guid(s);
return true;
} catch {
guid = Guid.Empty;
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
它可以调用
string s = "{CA761232-ED42-11CE-BACD-00AA0057B223}";
Guid id;
if (s.TryParseGuid(out id) {
// TODO: use id
} else {
// Sorry not a valid Guid.
}
Run Code Online (Sandbox Code Playgroud)
从C#7.0/Visual Studio 2017开始,您可以使用以下命令调用它:
string s = "{CA761232-ED42-11CE-BACD-00AA0057B223}";
if (s.TryParseGuid(out Guid id) {
// TODO: use id
} else {
// Sorry not a valid Guid.
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
从Visual Studio 2010/.NET Framework 4.0开始,System.Guid
提供了一个TryParse
和一个TryPareExact
方法.