クラスの中に、staticなコレクションで自身のインスタンスを持つ、
次のようなクラスを書きました。

class Person
{
static Dictionary<int, Person> list = new Dictionary<int, Person>();

public int ID { get; private set; }
public string Name { get; private set; }
public string Kana { get; private set; }

public static Person GetPerson(int id)
{
return list.ContainsKey(id) ? list[id] : null;
}

public static bool Add(int id, string name, string kana)
{
if (list.ContainsKey(id)) return false;
var p = new Person();
p.ID = id;
p.Name = name;
p.Kana = kana;
list.Add(id, p);
return true;
}
}

他の人に言わせれば、相当違和感があるコーディングなようです。
このコードにはどんな問題がありますか?
デザインパターンから見て、このようなコードはありえない or やめるべきですか?