如何解决C# - 检测字符串何时超出 [MaxLength(#)] 并截断?
public class MyObject
{
[MaxLength(128)]
public string Name {get; set;}
}
但是,当我使用超过 128 个字符的 Name 字符串创建 MyObject 时,我可以设置它并且它可以工作。这会导致一系列问题,因为当我将此对象插入数据库时,由于表中该列的字符串太长而导致异常。
我将如何确保太长的字符串被截断?我怎样才能检测到这种情况何时发生,以便我可以记录它?
解决方法
在 setter 中,您可以添加一些验证。
public class MyObject
{
private string name;
public string Name
{
get
{
return name;
}
set
{
if (string.IsNullOrEmpty(value) || value.Length <= 128)
{
name = value;
}
else
{
//log? do something or truncate
name = value.Substring(0,127);
}
}
}
}
或者我不喜欢它,但我试图让它与一个 Attribute 一起工作,并通过一个辅助类使它更容易扩展。
public class MyObject
{
private string name;
[MaxLength(128,ErrorMessage = "String is longer than {1} characters and has been truncated.")]
public string Name
{
get { return name; }
set
{
name = value.Validate(GetType().GetProperty(MethodBase.GetCurrentMethod().Name.Substring(4)).GetCustomAttributes(false));
}
}
}
public static class Tools
{
public static string Validate(this string value,object[] attributes)
{
if (attributes.FirstOrDefault(x => x is MaxLengthAttribute) is MaxLengthAttribute maxLengthAttribute)
{
if (maxLengthAttribute.IsValid(value))
{
return value;
}
else
{
//LogMethod(maxLengthAttribute.FormatErrorMessage(maxLengthAttribute.MaximumLength.ToString()));
return value.Substring(0,maxLengthAttribute.Length - 1);
}
}
return value;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。