首先,根据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% 确定这是我从未见过的一些细微的编码错误,但这一直困扰着我一整天,请帮忙!
编辑:我应该提到我从别人那里继承了这个令人费解的代码,所以你在上面看到的曲折代码是我真实代码中失败的一个稍微简化的版本。