Teste se string é um guia sem gerar exceções?

Eu quero tentar converter uma string para um Guid, mas eu não quero contar com a captura de exceções (

por motivos de desempenho - as exceções são caraspor razões de usabilidade - o depurador aparecepor razões de design - o esperado não é excepcional

Em outras palavras, o código:

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

Não é adequado.

Eu tentaria usar o RegEx, mas como o guid pode ser colocado entre parênteses, o embrulhado, nenhum embrulhado, dificulta.

Além disso, eu pensei que certos valores Guid são inválidos (?)

Atualização 1

ChristianK teve uma boa ideia para pegar apenasFormatException, ao invés de todos. Alterou o exemplo de código da pergunta para incluir sugestão.

Atualização 2

Por que se preocupar com exceções lançadas? Estou realmente esperando GUIDs inválidos com frequência?

A resposta ésim. É por isso que estou usando o TryStrToGuid - eusou esperando dados ruins.

Exemplo 1 Extensões de espaço para nome podem ser especificadas ao anexar um GUID a um nome de pasta. Eu poderia estar analisando nomes de pastas, verificando se o texto após o final. é um 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

Exemplo 2 Eu poderia estar executando um servidor web muito usado para verificar a validade de alguns dados de volta postados. Eu não quero que dados inválidos atinjam recursos de 2 a 3 ordens de magnitude maior do que o necessário.

Exemplo 3 Eu poderia estar analisando uma expressão de pesquisa inserida por um usuário.

Se eles inserirem GUIDs, quero processá-los especialmente (como pesquisar especificamente por esse objeto ou destacar e formatar esse termo de pesquisa específico no texto de resposta).

Atualização 3 - benchmarks de desempenho

Teste convertendo 10.000 bons Guids e 10.000 Bad Guids.

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. Eu não deveria ter que justificar uma pergunta.

questionAnswers(17)

yourAnswerToTheQuestion