<p>Si vous partez de quelque chose qui possede un <code>.Length</code> ou <code>.Count</code> (comme <code>ICollection<T></code>, <code>IList<T></code>, <code>List<T></code>, etc.) - alors ce sera l’option la plus rapide, car il n’est pas necessaire de passer par la sequence <code>GetEnumerator()</code>/<code>MoveNext()</code>/<code>Dispose()</code> requise par <code>Any()</code> pour verifier si une sequence <code>IEnumerable<T></code> n’est pas vide.</p>
<p>Pour un simple <code>IEnumerable<T></code>, alors <code>Any()</code> sera <em>generalement</em> plus rapide, car il n’a besoin de regarder qu’une seule iteration. Cependant, notez que l’implementation LINQ-to-Objects de <code>Count()</code> verifie <code>ICollection<T></code> (en utilisant <code>.Count</code> comme optimisation) - donc si votre source de donnees sous-jacente est <strong>directement</strong> une liste/collection, il n’y aura pas une enorme difference. Ne nous demandez pas pourquoi il n’utilise pas le <code>ICollection</code> non generique…</p>
<p>Bien entendu, si vous avez utilise LINQ pour filtrer les donnees (<code>Where</code> etc.), vous aurez une sequence basee sur un bloc iterateur, et donc cette optimisation <code>ICollection<T></code> est inutile.</p>
<p>En general avec <code>IEnumerable<T></code> : restez avec <code>Any()</code> ;-p</p>