我有一个带有 StringLength 属性的属性,但我可以为该属性分配任意长度的字符串。我在 VB.NET 4.7 Framework 中创建了以下测试程序:
Imports System.ComponentModel.DataAnnotations
Module Module1
Class C1
<StringLength(3)>
Public Property BufferId As String
End Class
Sub Main()
Dim c1 = New C1
c1.BufferId = "abcd"
Console.WriteLine($"c1.BufferId={c1.BufferId}")
Console.ReadKey()
End Sub
End Module
虽然 StringLength=3,但我可以分配长度为 4 的字符串。
当我分配长度超过指定长度的字符串时,如何使 StringLength 属性抛出异常?
属性是(编译器解释的属性有一些例外)passive注释;它们不会做任何事情,除非某些代码(通常是一个库,如 ORM 或 UI 工具包,或 Roslyn 分析器)寻找它们,并根据它们的存在做出一些决定。
如果您想验证事物:属性设置器可以提供帮助。我不太记得 VB,但用 C# 来说:
private string foo;
public string Foo
{
get => foo;
set
{
ArgumentNullException.ThrowIfNull(value);
if (value.Length > 4) throw new ArgumentOutOfRangeException(nameof(Foo));
foo = value;
}
}