DataAnnotations WriteOnly如果属性== null

本文关键字:null 属性 如果 WriteOnly DataAnnotations | 更新日期: 2023-09-27 18:05:31

我有以下属性:

public virtual String Firstname { get; set; }

,我只希望能够写入字段,如果它目前是空的(未设置),这可以通过DataAnnotations实现吗?

DataAnnotations WriteOnly如果属性== null

数据注释是用于验证的元数据,因此您可以创建自定义数据注释来验证属性值,但验证不能确保您的属性不会被设置,如果它已经有值。这些代码应该是属性setter本身的一部分,比如:

private string _firstName;
public string FirstName
{
    get 
    {
        return _firstName;
    }
    set
    {
        if (_firstName != null) throw ...
        _firstName = value;
    }
}

如果数据注释只是指属性,那么答案是:它可以通过属性来实现,但是你需要一些东西来实现与属性相关的一些逻辑。这通常是通过面向方面编程(AOP)完成的,在AOP中,您将创建标记属性,这些属性将被一些复杂的API使用。API将基于该属性用自定义代码包装你的类,在编译时(例如PostSharp)或运行时(例如Unity, Spring.NET)添加if语句。

另一种实现这一点的方法,对我来说更优雅,不为属性实现set,而只实现get

private string _firstName;

public string FirstName
{
    get 
    {
        return _firstName;
    }
}

和有一个功能:

public void SetFirstName(string FirstName) 
{
   _firstName = FirstName;
}

没有异常,没有返回值处理。您有一个属性(唯一的retrieve值)和一个函数或构造函数(为什么不,取决于您的体系结构,很难从文章中推断),只初始化一次。

通过我,你的对象的API将更加清晰和直接的这种方式。

问候。

还有一个特定的DataAnnotation语法来实现这一点:

[DisplayFormat(NullDisplayText = "some string")]
public virtual String Firstname { get; set; }