Да, есть возможность нарушить договор. Помните, что IndexOf
и EndsWith
по умолчанию используют сравнение, зависящее от культуры, что иногда может иметь неожиданное поведение. Если я напишу
TrimAfter("\u0301a\u0301a", "\u0301a")
затем IndexOf
не соответствует первому вхождению, потому что он рассматривает средние символы как один 'á'
, поэтому index
равен 2
, а метод возвращает "\u0301a"
, который, очевидно, заканчивается суффиксом .
Если вы хотите корректно доказывать правильность алгоритмов, используйте StringComparison.Ordinal
.
Однако статическая проверка Code Contracts в настоящее время не поддерживает анализ строковых значений и не понимает эту связь между IndexOf
и Substring
.