Para los amantes de C# :-D, cuál es la diferencia entre las excepciones producidas por Foo1 y Foo2?
csharp:
using System;
class Program
{
static void Main(string[] args)
{
try {
Foo1();
}
catch (Exception ex) {
Console.WriteLine(ex.ToString());
}
Console.WriteLine("------------------");
try {
Foo2();
}
catch (Exception ex) {
Console.WriteLine(ex.ToString());
}
}
private static void Foo1()
{
try {
Bar();
}
catch (Exception ex) {
throw ex;
}
}
private static void Foo2()
{
try {
Bar();
}
catch (Exception ex) {
throw;
}
}
private static void Bar()
{
throw new Exception("Error!");
}
}
class Program
{
static void Main(string[] args)
{
try {
Foo1();
}
catch (Exception ex) {
Console.WriteLine(ex.ToString());
}
Console.WriteLine("------------------");
try {
Foo2();
}
catch (Exception ex) {
Console.WriteLine(ex.ToString());
}
}
private static void Foo1()
{
try {
Bar();
}
catch (Exception ex) {
throw ex;
}
}
private static void Foo2()
{
try {
Bar();
}
catch (Exception ex) {
throw;
}
}
private static void Bar()
{
throw new Exception("Error!");
}
}
4 replies on “Quiz sobre C# – Excepciones”
Hmm, despues te explico...
La sentencia Throw a secas (Foo2) sólo puede ser lanzada dentro de un bloque Catch y por tanto, siempre devuelve, la excepción actual.
La sentencia Throw ex (Foo1) puede ser lanzada desde un bloque Try y por tanto, crea una nueva escepción.
Creo que esa es la diferencia entre ambas excepciones... una es simplemente la excepcion actual, y la otra es una "sobrecarga" del tipo exception.
Para mas info se puede observar la traza o source de la excepcion para comprobar que no son iguales.
Un Salido
Galle
Efectivamente Galle, si sólo utiliza throw es como si nunca se hubiera capturado la excepción.
Saludos