Quindi, ho una lista contenente una classe personalizzata, MyClass
MiaClasse ha proprietà, che può essere nullo (ma non sono destinate ad essere).
Quando questa classe viene ordinata, utilizzando un fascicolatore personalizzato, in cui il sorter accede a questa proprietà nulla e genera un'eccezione, l'eccezione viene considerata non gestita, anche se esiste un blocco try-catch attorno al metodo di ordinamento.
Ora per qualche motivo l'eccezione viene ancora scritta nella console, che è ciò che sta facendo il gestore delle eccezioni.
Ho una vera applicazione con questo stesso problema, causando il fallimento dei test dell'unità, anche se l'eccezione viene gestita correttamente e non posso spiegarlo.
eccezione non gestita in Lista Sort
Quindi ho allegato qualche codice di esempio per spiegarmi meglio, eseguirlo da VS.
Aggiornato Codice
Risultati:
System.InvalidOperationException
Impossibile confrontare due elementi dell'array.
Fatto!
Quindi sembra gestire l'eccezione personalizzata e lanciare il proprio?
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 per fornire un esempio completo. Guardandolo ora. –
perché non controlli nulla nel tuo metodo di confronto? Sarebbe meglio, sto pensando, quindi consentire al framework di lanciare un'eccezione. –
Perché voglio presentarmi al gestore delle eccezioni, dove viene gestito. – PostMan