Oto przykład pomocą sposób 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!");
}
Oto przykład określenie sposób:
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;
}
obsługi wyjątków
Większość specificly co zrobić z rised wyjątków w zwyczaju „próbować” metody wzór
Twoja metoda prawdopodobnie powinny unikać rzucania żadnych wyjątków - jeśli użytkownik chciał wyjątki będą używać non-Wypróbuj wersję. Dlatego powinieneś unikać metod wywoływania, które mogą rzucić podczas implementacji Twojego TryXxx. Jednak niektóre wyjątki są nieuniknione i mogą zostać odrzucone spod Twojej kontroli - na przykład OutOfMemoryException
, StackOverflowException
, itp ... Nic nie możesz na to poradzić i nie powinieneś próbować wychwycić tych wyjątków, po prostu pozwól im propagować do rozmówcy. Nie połykaj ich, nie rejestruj ich - to jest odpowiedzialność dzwoniącego.
Przykładem tego jest Dictionary<TKey, TValue>.TryGetValue
, gdy obiekt klucza dostarczony do tej metody zgłasza wyjątek podczas wywoływania GetHashCode
. Następnie wynikowy wyjątek to , a nie przechwycony w metodzie TryGetValue
- wywołujący zobaczy wyjątek. Ten kod demonstruje to dzieje:
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");
}
}
}
Jeśli masz na myśli funkcję języka, a następnie quid pro quo: daj mi przykład, z którym próbowałem przeczytać dokumentację: http://msdn.microsoft.com/en-us/library/0yd65esw(VS.80) .aspx –
Masz na myśli instrukcję "try"/'catch'? ] (http://msdn.microsoft.com/en-us/library/0yd65esw.aspx) – kennytm
następne pytanie: Proszę wyjaśnić wzór pustki? – vidalsasoon