更新
Guid.TryParse在.NET 4.0中可用
END UPDATE
显然,.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;
}
}
显然我并不喜欢这个,因为从第一天开始我就已经钻了这个,以避免抛出异常,如果你可以防范它的代码。
有谁知道为什么.NET Framework中没有公共的Guid.TryParse()?
有没有人有一个适用于所有GUID的真实正则表达式?
答案 0 :(得分:55)
CLR 2.0及更早版本中没有Guid.TryParse。它将从CLR 4.0和Visual Studio 2010开始提供。
至于为什么没有。这些类型的问题通常很难正确回答。最有可能的是疏忽或时间限制问题。如果你在反射器中打开mscorlib,你会发现在Guid
上实际上有一个名为TryParse的方法,但它是私有的。它在某些情况下也会引发异常,因此它与Int32.TryParse
不同。
答案 1 :(得分:19)
Guid.TryParse使用正则表达式实现。
答案 2 :(得分: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);
}
答案 3 :(得分:7)
Guids的TryParse
实现使用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;
}
}
可以用
调用string s = "{CA761232-ED42-11CE-BACD-00AA0057B223}";
Guid id;
if (s.TryParseGuid(out id) {
// TODO: use id
} else {
// Sorry not a valid Guid.
}
从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.
}
<强>更新强>
自Visual Studio 2010 / .NET Framework 4.0起,System.Guid
提供了TryParse
和TryPareExact
方法。
答案 4 :(得分:5)
就没有人的原因而言,这是一种疏忽。 .NET 4中将有一个Guid.TryParse
(有关详细信息,请参阅BCL blog post。)
答案 5 :(得分:0)
目前我不知道.NET Framework中没有TryParse功能。您将不得不求助于RegEx或try-catch选项。 RegEx不是我的一杯茶,所以我相信别人会发一个答案。
例外情况是性价比很高,所以我的投票会转到RegEx选项。
答案 6 :(得分:0)
这应该有效:
@"^\{?[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}\}?$"
答案 7 :(得分:0)
您可以编写自己的TryParse作为Guid的扩展方法。然后,当来自MS的“真实”出现时,你已经很好,不必改变。