StringLengthAttribute 不强制长度

问题描述 投票:0回答:1

我有一个带有 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 属性抛出异常?

.net data-annotations string-length
1个回答
0
投票

属性是(编译器解释的属性有一些例外)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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.