Ответ 1
Обычно вы видите это в реализации оператора ==.
Например:
public static bool operator ==(Foo f1, Foo f2)
{
if (ReferenceEquals(f1, f2))
{
return true;
}
if (ReferenceEquals(f1, null) || ReferenceEquals(f2, null))
{
return false;
}
// Now do comparisons
}
Вы не хотите использовать:
if (f1 == f2)
потому что это будет повторяться в том же коде! Альтернативой является:
if ((object)f1 == (object)f2)
(И то же самое для нулевой проверки.)