Контракты кода отлично работают до тех пор, пока вам не придется добавить bazillion Contract.Assume (...)
для результатов выходит из кода фреймворка. Например, MemoryStream.ToArray ()
никогда не возвращает нулевой массив, насколько я могу судить, глядя на него в Reflector, но он не задокументирован как контракт, поэтому я должен Assume
он везде.
Есть ли волшебный способ создать библиотеку контрактов для уже существующих функций? Я предполагаю, что как только вы получите несколько десятков наиболее часто используемых функций фреймворка, предупреждения станут гораздо более приятными.