Используя MVC3 и атрибут проверки StringLength
для свойства типа MyType<string>
, внутреннее значение которого равно string
, я получаю исключение:
Невозможно привести объект типа 'MyType 'для ввода' System.String '.
Итак, я добавил перегрузку оператора, вот мой класс:
public class MyType<T>
{
public T Value { get; set; }
//...
public static implicit operator string(MyType<T> instance)
{
//Return the internal value of the instance.
return Convert.ToString(instance.Value);
}
}
Так что теоретически это должно разрешить MyType
Быть приведенным к String
.Тем не менее, я все еще получаю ту же ошибку, вот трассировка стека:
[InvalidCastException: Невозможно привести объект типа 'MyType' к типу 'System.String'.]
System.ComponentModel.DataAnnotations.StringLengthAttribute.IsValid (значение объекта) + 64
System.ComponentModel.DataAnnotations.ValidationAttribute.IsValid (значение объекта, ValidationContext validationContext) + 176
Value.lidateAgnodeNoNjectAgnationAgnodeAntAgnateAgnoteNoNateAgnation.NoTalAntAgnationAntementNoTalNateAgnationAntementNoTalAntAgnationAntNameTaltationAntName)... ::. Component. Valid. Valid..... Valid. Val.ValidationContext validationContext) + 41
System.Web.Mvc.d__1.MoveNext () + 267
Метод StringLengthAttribute.IsValid
(из среды .NET, а не из моего кода) выполняет следующие действия:
public override bool IsValid(object value)
{
this.EnsureLegalLengths();
int num = (value == null) ? 0 : ((string)value).Length;
return value == null || (num >= this.MinimumLength && num <= this.MaximumLength);
}
Кажется, это должно работать, что мне не хватает?