首先,根据http://msdn.microsoft.com/en-us/library/x0b5b5bc.aspx,List.Find方法仅列为抛出ArgumentNullException.但是,我有以下测试代码,当使用Find与匿名委托时,在找不到要搜索的对象时抛出NullReferenceException.
namespace MyTestNS { class MyTestClass { [TestMethod()] public void ArrayMatchTest() { List objArray = new List(); 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%肯定这是我的一些微妙的编码错误,我只是没有看到,但这一直困扰着我,请帮忙!
编辑:我应该提到我从其他人那里继承了这个复杂的代码,所以你在上面看到的曲折代码是我的真实代码中失败的一些简化版本.
Find
在返回null.但是你要取消引用那个结果.也就是说,你正在调用:
Find(...).value