Late update: since C# 6.0, the null-propagation operator may be used to express concise like this:
if (  list?.Count  > 0 ) // For List<T>
if ( array?.Length > 0 ) // For Array<T>
or, as a cleaner and more generic alternative for IEnumerable<T>:
if ( enumerable?.Any() ?? false )
Note 1: all upper variants reflect actually IsNotNullOrEmpty, in contrast to OP question (quote):
Because of operator precedence IsNullOrEmpty equivalents look less appealing:
if (!(list?.Count > 0)) 
Note 2: ?? false is necessary, because of the following reason (summary/quote from this post):
?. operator will return null if a child member is null.
  But [...] if we try to get a non-Nullable member, like the
  Any() method, that returns bool [...] the compiler will
  "wrap" a return value in Nullable<>. For example, Object?.Any() will
  give us bool? (which is Nullable<bool>), not bool. 
  [...] Since it can't be implicitly casted to bool this expression cannot be used in the if
Note 3: as a bonus, the statement is also "thread-safe" (quote from answer of this question):
In a multithreaded context, if [enumerable] is accessible from another
  thread (either because it's a field that's accessible or because it's
  closed over in a lambda that is exposed to another thread) then the
  value could be different each time it's computed [i.e.prior null-check]