.NET 3.5中是否有GUID.TryParse()?

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.

  • +1只是因为它是一个有趣的答案.我注意到的TryParse由构造函数调用. (4认同)

Dar*_*rov 19

使用正则表达式的Guid.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)

  • 行为是故意的,空字符串不是有效的guid,因此返回false. (4认同)

Oli*_*bes 7

这种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方法.


bdu*_*kes 5

就没有人的原因而言,这是一种疏忽.Guid.TryParse在.NET 4中会有一个(有关详细信息,请参阅BCL博客文章).