Привет, я пытаюсь сделать простой контракт на код для сеттера, в котором указано DateTime Должно быть не менее пятнадцати лет.Элемент ссылок на класс контракта, который не является частью абстрактного класса/интерфейса, который аннотируется
Если я валидация в качестве члена класса контракта компилятор дает
Контракт класс ссылка «TypeValidation.CodeContract.CitizenContract» член «TypeValidation.CodeContract.CitizenContract.BeGreaterThanFiveTeenYearsOld (System.DateTime)» который не является частью абстрактного класса/интерфейса, который аннотируется.
Мой код:
[ContractClass(typeof(CitizenContract))]
public interface ICitizen
{
int Age { get; set; }
DateTime BirtDate { get; set; }
string Name { get; set; }
}
[ContractClassFor(typeof(ICitizen))]
public class CitizenContract : ICitizen
{
public int Age
{
get { return default(int); }
set
{
Contract.Requires<ArgumentOutOfRangeException>(value > 15, "Age must be sixteen or greater.");
}
}
public DateTime BirtDate
{
get { return default(DateTime); }
set
{
Contract.Requires<ArgumentOutOfRangeException>(MoreThanFifTeenYearsOld(value), "The birthdate has to be a minimum of sixteen years old");
}
}
public string Name
{
get { return default(string); }
set
{
Contract.Requires<ArgumentNullException>(!string.IsNullOrWhiteSpace(value), "Name Cant be null or empty.");
Contract.Requires<ArgumentOutOfRangeException>(value.Length >= 3 && value.Length <= 50, "Name has to have between three and fifty.");
}
}
bool MoreThanFifTeenYearsOld(DateTime dateToValidate)
{
if (dateToValidate == default(DateTime)) return false;
DateTime zeroTime = new DateTime(1, 1, 1);
var currentTime = DateTime.Now;
if (currentTime <= dateToValidate) return false;
TimeSpan span = currentTime - dateToValidate;
return ((zeroTime + span).Year - 1) >= 16;
}
}
Я не понимаю, почему он жалуется, может кто-нибудь объяснить, почему? Заранее спасибо
Вы пробовали «чистое решение»? Похоже, вы переименовали один из ваших методов проверки, но он кэшируется. –
Я думаю, что вам что-то не хватает - я не вижу BeGreaterThanFiveTeenYearsOld в вашем файле, даже когда компилятор жалуется на эту переменную/prop –
Да, я пытался очистить перекомпилировать проект несколько раз. –