.NET 3.5中有一个GUID.TryParse()吗?
UPDATE
Guid.TryParse在.NET 4.0中可用
END UPDATE
.NET CLR 2.0中显然没有公共的GUID.TryParse()。
所以,我正在研究正则expression式(又名googling来find一个),每次我发现一个关于RegEx A的注释部分有一个激烈的争论,使用正则expression式B.然后有人会写正则expression式C yadda yadda
所以无论如何,我决定要做的是这件事,但是我感觉不好。
public static bool IsGuid (string possibleGuid) { try { Guid gid = new Guid(possibleGuid); return true; } catch (Exception ex) { return false; } }
显然我不太喜欢这个,因为自从第一天就开始钻入我的行列,以避免抛出exception,如果你可以防守的话。
有谁知道为什么在.NET Framework中没有公共的Guid.TryParse()?
有没有人有一个真正的正则expression式,将适用于所有的GUID?
CLR 2.0和更早版本中没有Guid.TryParse。 它将从CLR 4.0和Visual Studio 2010开始。
至于为什么没有。 这些types的问题通常很难正确回答。 这很可能是一个疏忽或时间限制问题。 如果你在reflection器中打开mscorlib,你会发现实际上Guid
有一个名为TryParse的方法,但是它是私有的。 在某些情况下,它也会抛出一个exception,所以说Int32.TryParse
并不是一个好的Int32.TryParse
。
使用正则expression式的Guid.TryParse实现。
IsGuid实现为string的扩展方法…
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); }
TryParse
for Guids的这个实现使用try-catch来捕获错误的Guid。 它是作为扩展方法实现的,必须放在一个静态类中:
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. }
UPDATE
从Visual Studio 2010 / .NET Framework 4.0开始, System.Guid
提供了一个TryParse
和一个TryPareExact
方法。
至于为什么没有一个,这是一个疏忽。 在.NET 4中将会有一个Guid.TryParse
(详见BCL博客文章 )。
据我所知,.NET Framework中没有TryParsefunction。 你将不得不求助于RegEx或try-catch选项。 RegEx不是我的一杯茶,所以我确定别人会发表一个答案。
例外是昂贵的性能明智的,所以我的投票转到RegEx选项。
这应该工作:
@"^\{?[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}\}?$"
你可以写你自己的TryParse作为Guid的扩展方法。 那么当来自MS的“真正”一个出现时,你已经很好走了,不必改变。
- 如何分配configuration文件值?
- 最好的ASP.NET报告引擎与自定义报告创build能力
- ConfigurationManager.AppSettings 每次都从web.config文件中读取?
- 在ASP.NET MVC 4中使用自定义数据库模式的SimpleMembership
- 我如何让红帽网页服务器收听非本地主机的请求?
- 有条件地隐藏GridView中的CommandField或ButtonField
- 页面会在Google Chrome中加载两次
- 我应该如何将多个parameter passing给ASP.Net Web API GET?
- 什么时候应该在ASP.NET MVC中使用asynchronous控制器?