Bookmark Collection: Retrieving a bookmark that is not in the collection


Let’s see where we were…

  • Retrieve a Bookmark that is not in the collection, return null

The test for this looks like this:

[Test]
public void
RetrieveABookmarkNotInCollection()
{
   Assert
.IsNull(collection[exampleDotComLabel]);
}

When I run this I get the following error:

BookmarkCollectionFixture.RetrieveABookmarkNotInCollection : System.Collections.Generic.KeyNotFoundException : The given key was not present in the dictionary.

Unfortunately it does not return null like I want it to. I guess I will have to write some code. I need to modify the Indexer to check to see if the label is in the collection. If not it should return null. Here’s the code: 

public Uri this[string label]
{
   get
 
   {
      if (!dictionary.ContainsKey(label)) return null
;

      return dictionary[label]; 
   }
}

I compile and run and the tests pass. Let’s move on. The next post will address the following tests:

  • Add a Bookmark with a null label, expect ArgumentNullException
  • Add a Bookmark with a null URL, expect ArgumentNullException  

Surveying the rest of the tests in the test list indicates that there is not much left so I should be able to finish up the task in the next couple of posts.  

Comments (2)

  1. This an extremely off-topic comment, *but* I have never understood why the library was written this way. In this code

    if (!dictionary.ContainsKey(label))

    return null;

    return dictionary[label];

    The lookup is actually performed twice for objects in the dictionary. What a horrible performance penalty! The STL and MFC approaches seems much more sane in that regard.

  2. RGabo says:

    Interesting read ;), I just came through.

    My question is, how many of us would rather write:

    if (!dictionary.ContainsKey(label))

    return null;

    else

    return dictionary[label];

    It makes no real difference, but for me, it feels more ‘right’.

    I want to return null if dictionary doesn’t contain the key, _else_ I want to return the value.

    Anybody else? 🙂

    RGab