- 更新**
Guid.TryParse在. NET 4.0中可用
- 结束更新**
显然,在. NET CLR 2.0中没有公共GUID. TryParse()。
所以,我一直在寻找正则表达式[也就是在谷歌上搜索一个],每次我找到一个正则表达式时,评论区都会有一场激烈的争论,说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框架中没有公共Guid.TryParse()吗?
有没有人有一个真正的正则表达式,将工作的所有GUID?
8条答案
按热度按时间mnemlml81#
CLR 2.0及更早版本中没有Guid.TryParse。从CLR 4.0和Visual Studio 2010开始,它将可用。
至于为什么没有。这类问题通常很难正确回答。最有可能是疏忽或时间限制问题。如果你在reflector中打开mscorlib,你会看到
Guid
上实际上有一个名为TryParse的方法,但它是私有的。它在某些情况下也会抛出异常,所以它不是一个很好的等价物。oogrdqng2#
使用正则表达式的Guid.TryParse实现。
xsuvu9jc3#
IsGuid实现为字符串的扩展方法...
lnvxswe24#
仅适用于**.NET Framework 3.5**或更早版本:
此
TryParse
的Guid实现使用try-catch来捕获格式错误的Guid。它作为扩展方法实现,必须放在静态类中:它可以用
从C# 7.0 / Visual Studio 2017开始,您可以使用内联输出变量声明,并使用以下命令调用它:
自**.NET Framework 4.0**以来,
System.Guid
提供了TryParse
和TryPareExact
方法,使上述代码片段过时。dldeef675#
至于为什么没有
Guid.TryParse
,这是一个疏忽,在.NET 4中会有Guid.TryParse
(详细信息请参见BCL blog post)。hxzsmxv26#
据我所知,目前.NET Framework中还没有TryParse功能。您必须求助于RegEx或try-catch选项。RegEx不是我的菜,所以我相信其他人会发布答案。
异常在性能方面代价很高,所以我投票支持RegEx选项。
bfnvny8b7#
这应该行得通:
pnwntuvh8#
你可以写你自己的TryParse作为Guid的扩展方法。然后当来自MS的“真实的的”方法出现时,你已经很好地去做了,不必改变。