What does [param: NotNull] mean in C#?

前端 未结 2 1898
-上瘾入骨i
-上瘾入骨i 2020-12-08 18:40

In Entity Framework\'s source code (link) I found this line:

public virtual IRelationalTransaction Transaction 
{ get; [param: NotNull] protected set; }
         


        
2条回答
  •  忘掉有多难
    2020-12-08 18:44

    When you mark method with NotNull it means, that method returns not null object:

    [NotNull]
    public object Get()
    {
        return null; //error
    }
    

    When you mark setter it does the same - setter returns not null (because .net converts properties to get and set methods).

    public virtual IRelationalTransaction Transaction { get; [NotNull] protected set; }
    

    Equals to:

    [NotNull] 
    public virtual void set_Transaction(IRelationalTransaction value) { ... }
    

    So, you need to add param: to point, that "i mean - parameter of setter is not null, not a result of set-method":

    public virtual IRelationalTransaction Transaction { get; [param: NotNull] protected set; }
    

    Equals to:

    public virtual void set_Transaction([NotNull] IRelationalTransaction value) { ... }
    

提交回复
热议问题