代码之家  ›  专栏  ›  技术社区  ›  Ogre Psalm33

为什么C#List<T>查找似乎返回NullReferenceException?

  •  1
  • Ogre Psalm33  · 技术社区  · 16 年前

    首先,根据 http://msdn.microsoft.com/en-us/library/x0b5b5bc.aspx

    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%肯定这是我自己的一些细微的编码错误,我只是没有看到,但这一直困扰着我一整天,请帮助!

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

    2 回复  |  直到 16 年前
        1
  •  22
  •   samael    16 年前

    Find 返回null。但是你正在取消对结果的引用。也就是说,您正在调用:

    Find(...).value

        2
  •  4
  •   Andrew Hare    16 年前

    更简单的版本 Find 调用是这样的:

    A a1 = objArray.Find(a => a.name == findStr);
    

    如果你的 Predicate<A> 返回 false ? 这个 objArray 还给你一个 null 参考和 a A. 将导致 NullReferenceException .