В моем классе есть частное статическое поле только для чтения:
public class MyClass
{
// ISSUE #1 -- requires unproven: path != null
private static readonly DirectoryInfo MyDirectory =
new DirectoryInfo(Settings.Default.MyDirectoryPath);
protected virtual void SomeMethod()
{
if (MyDirectory.Exists)
{
// ISSUE #2 -- requires unproven: !string.IsNullOrEmpty(path)
var catalog = new DirectoryCatalog(MyDirectory.FullName);
}
}
}
Для проблемы №1 я использовал нулевой оператор объединения, чтобы по умолчанию использовать некоторую магическую строку, и это исправило ее, но мне это решение не очень нравится. Я надеялся, что есть лучшее решение.
Для проблемы № 2 единственное, что я могу придумать, - это использовать Contract.Assumes, потому что, если я пытаюсь использовать Contract.Requires(MyDirectory.Exists || !String.IsNullOrEmpty(MyDirectory.FullName));
, он жалуется на видимость (частное поле, используемое в a, требует защищенного метода).
DirectoryInfo
неправильно помечен контрактами, что оставляет мало жизнеспособных опции. - person Roman Starkov   schedule 19.06.2012