Приветствую.
Обнаружилась некорректная работа атрибутов MinLengthAttribute / MaxLengthAttribute при попытке применения их к массивам.
class Data {
[NonUpdatable, MaxLength(8)]
public abstract byte[] version { get; set; }
}
public override bool IsValid(ValidationContext context)
{
return context.IsNull(context) || context.Value.ToString().Length >= _value;
}
В случае массива для него будет возвращен тип.
Предлагаю так:
internal static int GetValueLenth(object value)
{
if (value == null)
return 0;
if (value is Array)
return (value as Array).Length
else
return value.ToString().Length;
}
//
public override bool IsValid(ValidationContext context)
{
return context.IsNull(context) || GetValueLenth(context.Value) >= _value;
}
Если возражений нет закоммичу.
Здравствуйте, shatl, Вы писали:
S>Обнаружилась некорректная работа атрибутов MinLengthAttribute / MaxLengthAttribute при попытке применения их к массивам.
Почему некорректная? Нигде н сказано что они должны работать с массивами
S>[c#]
S>internal static int GetValueLenth(object value)
S>{
S> if (value == null)
S> return 0;
S> if (value is Array)
S> return (value as Array).Length
S> else
S> return value.ToString().Length;
S>}
Есть возражения.
1) А почему только массив? А если у тебя в следующий раз коллекция будет? Дописывать новый if?
2) Не очень хорошо добавлять код который не нужен в 99.9% случаев, но при этом будет влиять на производительность.
3) У тебя в коде смешаны is и as проверки что не очень хорошо. Можно сделать сразу as с последующей проверкой на null.
Лучший вариант думаю будет если ты создашь отдельный атрибут для проверки длины массива. А здесь пусть все остается как есть
Здравствуйте, Andre, Вы писали:
S>>Обнаружилась некорректная работа атрибутов MinLengthAttribute / MaxLengthAttribute при попытке применения их к массивам.
A>Почему некорректная? Нигде н сказано что они должны работать с массивами 
Там вообще ничего не сказано
...
A>Есть возражения.
A>1) А почему только массив? А если у тебя в следующий раз коллекция будет? Дописывать новый if?
A>2) Не очень хорошо добавлять код который не нужен в 99.9% случаев, но при этом будет влиять на производительность.
A>3) У тебя в коде смешаны is и as проверки что не очень хорошо. Можно сделать сразу as с последующей проверкой на null.
A>Лучший вариант думаю будет если ты создашь отдельный атрибут для проверки длины массива. А здесь пусть все остается как есть
В общем согласен. Сделаю отдельные атрибуты.
P.S. Вредно по выходным за компьютером сидеть...