Bien que vous ne puissiez pas le faire directement, vous pouvez le faire par l'intermédiaire de Cast
:
if (enumerable.Cast<object>().Any())
Cela devrait toujours fonctionner, car tout IEnumerable
peut être enveloppée comme un IEnumerable<object>
. Il finira par mettre en boîte le premier élément s'il est en fait un IEnumerable<int>
ou similaire, mais cela devrait fonctionner. Contrairement à la plupart des méthodes LINQ, Cast
y OfType
cible IEnumerable
plutôt que IEnumerable<T>
.
Vous pourriez écrire votre propre sous-ensemble de méthodes d'extension, comme celles de LINQ, mais en opérant sur les méthodes non génériques de IEnumerable
type si vous le souhaitez, bien sûr. L'implémentation de LINQ to Objects n'est pas terriblement difficile - vous pouvez utiliser ma méthode Projet Edulinq comme point de départ, par exemple.
Dans certains cas, il est possible de mettre en œuvre Any(IEnumerable)
un peu plus efficacement qu'en utilisant Cast
- par exemple, en prenant un raccourci si la cible implémente la méthode non générique ICollection
l'interface. À ce stade, il n'est pas nécessaire de créer un itérateur ou de prendre le premier élément. Dans la plupart des cas, cela ne fera pas une grande différence en termes de performances, mais c'est le genre de choses que vous devez faire. podría si vous optimisiez.