Я полагаю, что проблема в том, что в настоящее время Code Contracts не «заглядывает внутрь» строк, даже если они являются константами времени компиляции, поэтому он ничего не знает о том, будет ли выполнен контракт.
Например, следующее выдаст предупреждение:
var test = "test";
Contract.Assert(!test.Contains("/")); // Warning here
Вы можете использовать Contract.Assume
, чтобы отключить предупреждения.
Например:
var test = "test";
Contract.Assume(!test.Contains("/"));
Contract.Assert(!test.Contains("/")); // no warning