Comparing two objects having two nullable date fields
Nullable&lt;T&gt; already does the hard work for you. Just override Equals on your ExpiryDates class (and GetHashCode):

public override bool Equals(object obj)
{
    var otherDates = obj as ExpiryDates;

    return otherDates != null 
        &amp;&amp; MNL_ExpiryDate.Equals(otherDates.MNL_ExpiryDate) 
        &amp;&amp; PSL_ExpiryDate.Equals(otherDates.PSL_ExpiryDate);
}


As pointed out by mjolka in a comment. It would be advisible to implement IEquatable&lt;T&gt; (IEquatable&lt;ExpiryDates&gt;) as well. See the documentation for why it's a useful thing to do.

Further edit... It does say in the comments for IEquatable&lt;T&gt; but you should additionally override == and != e.g.

public static bool operator ==(ExpiryDates left, ExpiryDates right)
{
    if (object.ReferenceEquals(left, null))
    {
        return object.ReferenceEquals(right, null);
    }
    return left.Equals(right);
}