Tout d'abord, selon http://msdn.microsoft.com/en-us/library/x0b5b5bc.aspx, la méthode List.Find est répertoriée uniquement comme argument ArgumentNullException. Cependant, j'ai le code de test suivant qui, en utilisant Find avec un délégué anonyme, lance une exception NullReferenceException lorsque l'objet recherché n'est pas trouvé.Pourquoi C# Liste <T> .Find semble retourner NullReferenceException?
namespace MyTestNS
{
class MyTestClass
{
[TestMethod()]
public void ArrayMatchTest()
{
List<A> objArray = new List<A>();
objArray.Add(new A("1","one"));
objArray.Add(new A("2", "two"));
string findStr = "3";
string foundVal;
// Find using an anonymous delegate:
foundVal = objArray.Find(delegate(A a) // <- System.NullReferenceException: Object reference not set to an instance of an object..
{
if (a.name == findStr)
return true;
else return false;
}).value;
}
}
}
Je ne comprends pas pourquoi je reçois un NullReferenceException au lieu de la Trouver tout simplement pas trouver l'élément et retourner null. Je suis sûr à 90% que c'est une erreur de codage subtile de ma part que je n'ai pas vue, mais cela m'a dérangé toute la journée, aidez-moi! Je dois mentionner que j'ai hérité de ce code compliqué de quelqu'un d'autre, donc le code sinueux que vous voyez ci-dessus est une version quelque peu simplifiée de ce qui échoue dans mon code réel.
Vous avez parfaitement raison! Parfois, ça pue le maintien du code alambiqué de quelqu'un d'autre! –