Как Contract.Exists увеличивает стоимость? - PullRequest
9 голосов
/ 07 мая 2010

Я только начинаю изучать библиотеку контрактов кода, которая входит в стандартную комплектацию VS2010. Одна вещь, с которой я сталкиваюсь сразу же, - это то, что на самом деле означают некоторые положения договора.

Например, чем эти два утверждения отличаются?

Contract.Requires(!mycollection.Any(a => a.ID == newID));
Contract.Requires(!Contract.Exists(mycollection, a => a.ID == newID));

Другими словами, что Contract.Exists делает в практических целях, либо для разработчика, использующего мою функцию, либо для системы статического анализа кода?

Ответы [ 2 ]

4 голосов
/ 07 мая 2010

Версия, которая использует Contract.Exists, предпочтительнее из-за ее декларативного характера. Другое преимущество состоит в том, что фреймворк знает этот контракт и имеет больше шансов быть «пойманным» в статическом анализе.

1 голос
/ 07 мая 2010

Хорошо, я нашел ответ. Согласно Руководству пользователя Code Contracts, раздел 2.7.2:

"Также возможно использовать метод расширения System.Linq.Enumerable.Any вместо Contract.Exists."

Так что они эквивалентны. Я буду использовать Any вместо Exists, так что это согласуется с остальной частью нашего кода.

...