Como testar o valor de Enum para Enum?

Eu quero escrever uma função que pode validar um determinado valor (passado como uma string) contra possíveis valores de umenum. No caso de uma correspondência, deve retornar a instância enum; caso contrário, deve retornar um valor padrão.

A função não pode usar internamentetry/catch, que exclui o usoEnum.Parse, que lança uma exceção quando recebe um argumento inválido.

Eu gostaria de usar algo nos moldes de umTryParse função para implementar isso:

public static TEnum ToEnum<TEnum>(this string strEnumValue, TEnum defaultValue)
{
   object enumValue;
   if (!TryParse (typeof (TEnum), strEnumValue, out enumValue))
   {
       return defaultValue;
   }
   return (TEnum) enumValue;
}