Aquí es un ejemplo de usando un método TryXxx:
string s = Console.ReadLine();
int x;
if (int.TryParse(s, out x))
{
Console.WriteLine("You entered the valid integer {0}", x);
}
else
{
Console.WriteLine("Invalid input!");
}
Aquí está un ejemplo de definir el método:
bool TryParse(string s, out int x) // out parameter for result
{
if (!allCharactersAreValid(s))
{
x = 0;
return false;
}
// More checks...
// Parse the string...
x = 42;
return true;
}
manejo de excepciones
La mayoría especificamente qué hacer con excepciones rised en la costumbre 'Try' métodos patrón
Su método probablemente debería evitar tirar cualquier excepción - si su usuario quería excepciones que usarían la versión no intentarlo. Por lo tanto, debe intentar evitar los métodos de llamada que pueden arrojarse al implementar su TryXxx. Sin embargo, algunas excepciones son inevitables y podrían perderse de su control, por ejemplo, OutOfMemoryException
, StackOverflowException
, etc. No hay nada que pueda hacer al respecto y no debería tratar de detectar estas excepciones, simplemente déjelos propagar a la persona que llama. No se los trague, no los registre, esa es la responsabilidad de quien llama.
Un ejemplo de esto es Dictionary<TKey, TValue>.TryGetValue
cuando el objeto clave proporcionado a este método arroja una excepción cuando se llama al GetHashCode
. Entonces la excepción resultante es no atrapado dentro del método TryGetValue
- la persona que llama verá la excepción. Este código muestra que esto ocurra:
using System;
using System.Collections.Generic;
class Foo
{
public override int GetHashCode()
{
throw new NotImplementedException();
}
}
class Program
{
public static void Main()
{
Dictionary<object, object> d = new Dictionary<object, object>();
d["bar"] = 42;
object s;
Foo foo = new Foo();
if (d.TryGetValue(foo, out s)) // results in NotImplementedException
{
Console.WriteLine("found");
}
}
}
Si te refieres a la característica de idioma, entonces quid pro quo: dame un ejemplo de tu intento de leer la documentación: http://msdn.microsoft.com/en-us/library/0yd65esw(VS.80) .aspx –
¿Te refieres a la instrucción ['try' /' catch'? ] (http://msdn.microsoft.com/en-us/library/0yd65esw.aspx) – kennytm
siguiente pregunta: ¿explicar el patrón de vacío? – vidalsasoon