まず、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;
}
}
}
アイテムが見つからずにnullを返すだけで、FindではなくNullReferenceExceptionが発生する理由がわかりません。私が見たことがないのは私の側の微妙なコーディングエラーであると90%確信していますが、これは一日中私を悩ませてきました、助けてください!
編集:私はこの複雑なコードを他の誰かから継承したことを言及する必要があります。したがって、上記のねじれたコードは、実際のコードで失敗したもののやや単純化されたバージョンです。