То, что вы хотите (после прочтения комментариев), произойдет по умолчанию:
Если вы включите кодовые контракты в вызывающем коде, верификатор посчитает, что возвращение GetPerson()
может быть нулевым.Итак:
IPerson GetPerson(Guid personId)
{
// no pre/post conditions
}
void PrintPerson(IPerson p)
{
Contract.Requires(p != null);
...
}
void Foo()
{
var p = GetPerson(id);
PrintPerson(p); // a warning here: can not verify p != null
}
И, совершенно не имеющий отношения к вопросу, это обычно будет более эффективным, если люди (как) словарь:
IPerson GetPerson(Guid personId)
{
Person p = null;
this.persons.TryGetValue(personId, out p);
return p;
}