Sprawdź, czy ciąg znaków jest przewodnikiem bez wyrzucania wyjątków?

Chcę spróbować przekonwertować ciąg znaków na Guid, ale nie chcę polegać na łapaniu wyjątków (

ze względu na wydajność - wyjątki są drogieze względów użyteczności - pojawia się debuggerze względów projektowych - oczekiwane nie jest wyjątkowe

Innymi słowy kod:

public static Boolean TryStrToGuid(String s, out Guid value)
{
    try
    {
        value = new Guid(s);
        return true;
    }
    catch (FormatException)
    {
        value = Guid.Empty;
        return false;
    }
}

nie nadaje się.

Spróbowałbym użyć RegEx, ale ponieważ guid może być zawinięty w nawias, zawijanie nawiasów klamrowych, brak owinięcia, utrudnia.

Ponadto myślałem, że pewne wartości Guid są nieprawidłowe (?)

Aktualizacja 1

ChristianK miałem dobry pomysł na złapanie tylkoFormatExceptionraczej niż wszystkie. Zmieniono próbkę kodu pytania, tak aby zawierała sugestię.

Aktualizacja 2

Po co martwić się o rzucone wyjątki? Czy naprawdę często oczekuję nieprawidłowych identyfikatorów GUID?

Odpowiedź totak. Dlatego używam TryStrToGuid - Irano oczekując złych danych.

Przykład 1 Rozszerzenia przestrzeni nazw można określić, dołączając identyfikator GUID do nazwy folderu. Mogę analizować nazwy folderów, sprawdzając, czy tekst po finale. to GUID.

c:\Program Files
c:\Program Files.old
c:\Users
c:\Users.old
c:\UserManager.{CE7F5AA5-6832-43FE-BAE1-80D14CD8F666}
c:\Windows
c:\Windows.old

Przykład 2 Być może używam mocno używanego serwera WWW, który chce sprawdzić poprawność niektórych wysłanych danych. Nie chcę, aby nieprawidłowe dane wiązały zasoby o 2-3 rzędy wielkości wyższe niż to konieczne.

Przykład 3 Być może analizuję wyrażenie wyszukiwania wprowadzone przez użytkownika.

Jeśli wprowadzą identyfikatory GUID, chcę je przetwarzać specjalnie (np. Wyszukując konkretnie ten obiekt lub wyróżnić i sformatować ten konkretny termin wyszukiwania w tekście odpowiedzi).

Aktualizacja 3 - testy wydajności

Test przekształcający 10 000 dobrych Guidów i 10 000 złych Guidów.

Catch FormatException:
   10,000 good:     63,668 ticks
   10,000 bad:   6,435,609 ticks

Regex Pre-Screen with try-catch:
   10,000 good:    637,633 ticks
   10,000 bad:     717,894 ticks

COM Interop CLSIDFromString
   10,000 good:    126,120 ticks
   10,000 bad:      23,134 ticks

p.s. Nie powinienem uzasadniać pytania.