Alors j'ai couru dans une situation aujourd'hui où une partie de la production de code n'était pas précisément parce qu'une méthode joué exactement comme documenté dans MSDN. Honte sur moi pour ne pas la lecture de la documentation. Cependant, je suis encore à me gratter la tête, comme pour pourquoi il se comporte de cette manière, même si "by design", puisque ce comportement est exactement à l'opposé de ce que je me serais attendu (et d'autres, des comportements connus) et, par conséquent, semble violer le principe de moindre surprise.
L' All()
méthode permet de fournir un prédicat (comme une expression lambda) pour tester un IQueryable
, renvoyant une valeur Booléenne qui indique si tous les membres de la collection correspondent le test. So far So good. Là où ça devient bizarre. All()
également les retours true
si la collection est vide. Cela semble tout à l'envers pour moi, pour les raisons suivantes:
- Si la collection est vide, un test de ce genre est, au mieux, non défini. Si mon entrée est vide, je ne peux pas affirmer que toutes les voitures garées là sont rouges. Avec ce comportement, sur un vide allée toutes les voitures garées il y a le rouge ET le bleu ET le damier - toutes ces expressions renvoient true.
- Pour quiconque est familier avec le SQL notion que NULL != NULL, c'est un comportement inattendu.
- L'
Any()
méthode se comporte comme prévu, et (correctement) renvoie faux car il n'a pas tous les membres qui correspondent le prédicat.
Donc ma question est, pourquoi est - All()
se comporter de cette façon? Ce problème permet-il de résoudre? Est-ce à violer le principe de moindre surprise?
J'ai marqué cette question .NET 3.5, si le comportement s'applique également aux .NET 4.0 ainsi.
EDIT Ok, j'ai donc saisir l'aspect logique à cela, comme l'a si excellemment exposées par Jason et le reste d'entre vous. Certes, un regroupement vide est quelque chose d'un cas limite. Je suppose que ma question est enracinée dans la lutte qui, juste parce que quelque chose est logique ne signifie pas nécessairement le fait de sens si vous n'êtes pas dans le bon état d'esprit.