49

アップデート

Guid.TryParse は .NET 4.0 で使用できます

更新を終了

明らかに、.NET CLR 2.0 にはパブリック GUID.TryParse() はありません。

それで、私は正規表現を調べていました [別名、検索するためにグーグルで探していました]、正規表現を見つけるたびに、コメントセクションで RegEx A が機能しないという激しい議論がありました。RegEx B を使用してください。やだ

とにかく、こうすることにしたのですが、残念です。

public static bool IsGuid (string possibleGuid) {

    try {
      Guid gid = new Guid(possibleGuid);
      return true;    
    } catch (Exception ex) {
      return false;
    }
}

明らかに、私はこれが本当に好きではありません。なぜなら、防御的にコード化できる場合に例外をスローすることを避けるために、初日から掘り下げられてきたからです。

.NET Framework に public Guid.TryParse() がない理由を知っている人はいますか?

すべての GUID で機能する実際の正規表現を持っている人はいますか?

4

8 に答える 8

55

CLR 2.0 以前には Guid.TryParse はありません。CLR 4.0 および Visual Studio 2010 以降で利用できるようになります。

なかった理由について。これらのタイプの質問は、通常、正しく答えるのが困難です。ほとんどの場合、それは見落としまたは時間的制約の問題でした。リフレクターで mscorlib を開くと、TryParse という名前のメソッドが実際に存在することがわかりますが、これはGuid非公開です。また、場合によっては例外をスローするため、 say と同等ではありませんInt32.TryParse

于 2009-11-06T16:20:22.827 に答える
19

正規表現を使用したGuid.TryParse の実装。

于 2009-11-06T16:20:57.510 に答える
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);
}
于 2009-11-06T16:33:26.877 に答える
5

なぜ無いかというと見落としです。Guid.TryParse.NET 4 には があります (詳細については、 BCL ブログ投稿を参照してください)。

于 2009-11-06T16:20:21.177 に答える
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}\}?$"
于 2009-11-06T16:26:06.550 に答える
0

Guidの拡張メソッドとして独自のTryParseを作成できます。その後、MSからの「本物の」ものが表示されたら、あなたはすでに行って良いので、変更する必要はありません。

于 2009-11-06T16:26:16.763 に答える
0

現時点で、私の知る限り、.NET Framework には TryParse 機能はありません。RegEx または try-catch オプションに頼る必要があります。正規表現は私の好みではないので、他の誰かが回答を投稿すると確信しています。

例外はパフォーマンス面でコストがかかるため、RegEx オプションに投票します。

于 2009-11-06T16:22:57.490 に答える