Что означает [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относится к