Por lo tanto, tengo una lista que contiene una clase personalizada, MiClase
MiClase tiene propiedades, que puede ser nulo (pero no están destinados a ser).
Cuando esta clase se ordena, utilizando un clasificador personalizado, donde el clasificador accede a esta propiedad nula y lanza una excepción, la excepción se considera no controlada, aunque hay un bloque try-catch alrededor del método de ordenación.
Ahora, por alguna razón, la excepción aún se escribe en la consola, que es lo que hace el controlador de excepciones.
Tengo una aplicación real con este mismo problema, lo que hace que mis pruebas de unidad fallen, aunque la excepción se maneje correctamente y no puedo explicar esto.
Excepción no controlada en la Lista Ordenar
Así que he adjuntado un código de muestra para explicarme mejor, ejecútelo desde VS.
Actualizado Código
Resultados:
System.InvalidOperationException
Error al comparar dos elementos de la matriz.
¡Hecho!
Parece que está manejando mi excepción personalizada, y lanzando la suya propia?
using System;
using System.Collections.Generic;
using System.Data;
namespace TestSortException
{
class Program
{
static void Main()
{
try
{
var list = new List<MyClass>
{
new MyClass("1"),
new MyClass(null),
new MyClass("fdsfsdf")
};
list.Sort(new MyClassSorter());
}
catch(Exception e)
{
Console.WriteLine(e.GetType());
Console.WriteLine(e.Message);
}
Console.WriteLine("Done!");
Console.ReadLine();
}
}
class MyClassSorter : IComparer<MyClass>
{
public int Compare(MyClass x, MyClass y)
{
// try
// {
if (x.MyString == y.MyString)
return 0;
// Unhandled??? Exception here
if (x.MyString.Length > y.MyString.Length)
return 1;
return -1;
// }
// catch (Exception)
// {
// return -1;
// }
}
}
class MyClass
{
private string _myString;
public string MyString
{
get
{
if (_myString == null) throw new DataException("MyString is Null");
return _myString;
}
}
public MyClass(string myString)
{
_myString = myString;
}
}
}
+1 para proporcionar un ejemplo completo. Mirándolo ahora. –
¿por qué no verificas null en tu método de comparación? Sería mejor, estoy pensando, y luego permitir que el marco arroje una excepción. –
Porque quiero saltar hasta mi controlador de excepciones, donde se maneja. – PostMan