Si siempre crea un tipo, entonces puede terminar con un montón de desorden en su aplicación.
Como dije aquí, un caso de uso típico es un TrySomething
Método en el que desea devolver un bool como indicador de éxito y luego el valor real. También me parece un poco más limpio en una declaración if: las tres opciones tienen aproximadamente la misma LOC de todos modos.
int myoutvalue;
if(int.TryParse("213",out myoutvalue){
DoSomethingWith(myoutvalue);
}
vs.
ParseResult<int> myoutvalue = int.TryParse("213");
if (myoutvalue.Success) {
DoSomethingWith(myoutvalue.Value);
}
vs.
int? myoutvalue = int.TryParse("213");
if(myoutvalue.HasValue){
DoSomethingWith(myoutvalue.Value);
}
En cuanto a la "¿Por qué no devolver un tipo anulable": existe TryParse desde 1.x Marco, mientras que los tipos anulables vinieron con 2,0 (Dado que requieren los genéricos). Entonces, ¿por qué romper innecesariamente la compatibilidad o comenzar a introducir inconsistencias entre TryParse en algunos tipos? Siempre puede escribir su propio Método de extensión para duplicar la funcionalidad ya existente (Consulte Eric Lipperts Post en un tema no relacionado que incluye algún razonamiento detrás de hacer/no hacer cosas)
Otro caso de uso es si debe devolver múltiples valores no relacionados, aunque si haces eso, esto debería disparar una alarma de que tu método probablemente esté haciendo demasiado. Por otro lado, si su Método es algo así como una costosa base de datos o llamada de servicio web y desea almacenar en caché el resultado, puede tener sentido hacerlo. Claro, podría crear un tipo, pero nuevamente, eso significa un tipo más en su aplicación.
Puede escribir un contenedor alrededor de TryParse si no le gusta. – tuinstoel
BTW, también hay un método Parse, que no tiene ningún parámetro out y simplemente devuelve un valor. Si la cadena no se puede convertir al tipo, se lanza una excepción. – devuxer
Tener un tipo de retorno de vacío mientras usa un parámetro de salida único no tiene sentido, no. Sin embargo, ve algunas de las respuestas para buenos usos. – Thorarin