Во-первых, согласно http://msdn.microsoft.com/en-us/library/x0b5b5bc.aspx, метод List.Find указан только как выбрасывающий ArgumentNullException. Однако у меня есть следующий тестовый код, который при использовании Find с анонимным делегатом выдает исключение 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;
}
}
}
Я не понимаю, почему я получаю исключение NullReferenceException вместо Find, просто не найдя элемент и возвращая null. Я на 90% уверен, что это небольшая ошибка кодирования с моей стороны, которую я просто не видел, но это беспокоило меня весь день, пожалуйста, помогите!
EDIT:
Я должен упомянуть, что я унаследовал этот извилистый код от кого-то другого, поэтому извилистый код, который вы видите выше, является несколько упрощенной версией того, что не удалось в моем реальном коде.