¿Es esta la forma correcta de iterar sobre el Concurrentdictionary en C #

Sólo estoy usando este código para un ejemplo. Supongamos que tengo la siguiente clase de persona.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace dictionaryDisplay
{
class Person
{
    public string FirstName { get; private set;}
    public string LastName { get; private set; }

    public Person(string firstName, string lastName)
    {
        this.FirstName = firstName;
        this.LastName = lastName;

    }

    public override string ToString()
    {
        return this.FirstName + " " + this.LastName;
    }
}

}

Programa principal

static void Main(string[] args)
    {
        ConcurrentDictionary<int, Person> personColl = new ConcurrentDictionary<int,   Person>();

        personColl.TryAdd(0, new Person("Dave","Howells"));
        personColl.TryAdd(1, new Person("Jastinder","Toor"));

        Person outPerson = null;
        personColl.TryRemove(0, out outPerson);


        //Is this safe to do?
        foreach (var display in personColl)
        {
            Console.WriteLine(display.Value);
        }





    }

¿Es esta la forma segura de iterar sobre un diccionario concurrente? Si no, ¿cuál es la forma segura de hacerlo?

Digamos que quiero eliminar un objeto Person del diccionario. Utilizo el método tryRemove, pero ¿qué hago con el objeto outPerson? la persona eliminada del diccionario se almacena en él. ¿Qué hago con el objeto outPerson para borrarlo por completo?