Что означает [param: NotNull] в C#?
в исходном коде Entity Framework (ссылке) Я нашел эту строку:
public virtual IRelationalTransaction Transaction
{ get; [param: NotNull] protected set; }
The [param: NotNull]
часть выглядит очень странно для меня. Есть идеи, что это за синтаксис C#? Я знаком с атрибутами и парам, но не с этой комбинацией.
определение NotNull таково:
[AttributeUsage(
AttributeTargets.Method | AttributeTargets.Parameter |
AttributeTargets.Property | AttributeTargets.Delegate |
AttributeTargets.Field)]
internal sealed class NotNullAttribute : Attribute
{
}
который я ожидал использовать просто как [NotNull]
но что такое param
здесь делаешь?
2 ответа:
когда вы отмечаете метод с
NotNull
это означает, что метод возвращает не null объекта:[NotNull] public object Get() { return null; //error }
когда вы отмечаете setter, он делает то же самое - setter возвращает not null (потому что .net преобразует свойства В методы get и set).
public virtual IRelationalTransaction Transaction { get; [NotNull] protected set; }
равен:
[NotNull] public virtual void set_Transaction(IRelationalTransaction value) { ... }
Итак, вам нужно добавить
param:
чтобы указать, что "я имею в виду-параметр сеттера не является нулем, а не результатом set-method":public virtual IRelationalTransaction Transaction { get; [param: NotNull] protected set; }
равен:
public virtual void set_Transaction([NotNull] IRelationalTransaction value) { ... }
param:
- это атрибут target. Смотрите:17.2 атрибут спецификацияатрибут target может быть одним из следующих:
сборка, модуль, поле, событие, метод, параметр, свойство, отдача, типа
так
[param: NotNull]
означает, чтоNotNullAttribute
относится к