MinLength, MaxLength и массивы - bug
От: shatl Украина http://shatl.spaces.live.com
Дата: 13.01.07 17:41
Оценка:
Приветствую.
Обнаружилась некорректная работа атрибутов 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;
}


Если возражений нет закоммичу.
WBR,
Shatl
Re: MinLength, MaxLength и массивы - bug
От: Andre Украина  
Дата: 14.01.07 08:04
Оценка:
Здравствуйте, 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.


Лучший вариант думаю будет если ты создашь отдельный атрибут для проверки длины массива. А здесь пусть все остается как есть
Я бы изменил мир — но Бог не даёт исходников...
Re[2]: MinLength, MaxLength и массивы - bug
От: shatl Украина http://shatl.spaces.live.com
Дата: 15.01.07 12:34
Оценка:
Здравствуйте, Andre, Вы писали:

S>>Обнаружилась некорректная работа атрибутов MinLengthAttribute / MaxLengthAttribute при попытке применения их к массивам.


A>Почему некорректная? Нигде н сказано что они должны работать с массивами

Там вообще ничего не сказано

...

A>Есть возражения.

A>1) А почему только массив? А если у тебя в следующий раз коллекция будет? Дописывать новый if?
A>2) Не очень хорошо добавлять код который не нужен в 99.9% случаев, но при этом будет влиять на производительность.
A>3) У тебя в коде смешаны is и as проверки что не очень хорошо. Можно сделать сразу as с последующей проверкой на null.


A>Лучший вариант думаю будет если ты создашь отдельный атрибут для проверки длины массива. А здесь пусть все остается как есть


В общем согласен. Сделаю отдельные атрибуты.
P.S. Вредно по выходным за компьютером сидеть...
WBR,
Shatl
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.