Hola,
+1 al "TryCreate", aunque, todo esto me deja una rara sensación, como que no entiendo muy bien que uno espere "nil" de esta forma... entonces habría de comprobarse después si el objeto ha sido o no creado. Ahora bien, ¿qué tal el uso de excepciones? Se le pasan los parámetros a cierto método, y, este levanta determinada excepción si los parámetros no son válidos y el objeto no puede ser creado. ¿Qué os parece?