当前位置:  开发笔记 > 编程语言 > 正文

为什么C#List <T> .Find似乎返回NullReferenceException?

如何解决《为什么C#List<T>.Find似乎返回NullReferenceException?》经验,为你挑选了1个好方法。

首先,根据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%肯定这是我的一些微妙的编码错误,我只是没有看到,但这一直困扰着我,请帮忙!

编辑:我应该提到我从其他人那里继承了这个复杂的代码,所以你在上面看到的曲折代码是我的真实代码中失败的一些简化版本.



1> 小智..:

Find 返回null.但是你要取消引用那个结果.也就是说,你正在调用:

Find(...).value

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有