JetBrains Rider 2025.2 Help

代码注解属性

JetBrains.Annotations 框架提供了以下描述的多种属性。

要在代码中使用这些属性,您需要按照 源代码中的注解 部分中的描述引用 JetBrains.Annotations

注解属性

CanBeNullAttribute

表示标记元素的值有时可能为 null ,因此在使用之前需要检查 null

示例

[CanBeNull] object Test() => null; void UseTest() { var p = Test(); var s = p.ToString(); // Warning: Possible 'System.NullReferenceException' }

欲了解更多信息,请参阅 值和可空性分析

NotNullAttribute

表示标记元素的值永远不会为 null

示例

[NotNull] object Foo() { return null; // Warning: Possible 'null' assignment }

欲了解更多信息,请参阅 值和可空性分析

ItemNotNullAttribute

可以应用于从 IEnumerable 派生的类型的符号,以及 任务Lazy 类的符号,以指示集合项、 Task.Result 属性或 Lazy.Value 属性的值永远不会为 null。

示例

public void Foo([ItemNotNull]List<string> books) { foreach (var book in books) { if (book != null) // Warning: Expression is always true Console.WriteLine(book.ToUpper()); } }

有关更多信息,请参见 值和可空性分析

ItemCanBeNullAttribute

可以应用于从 IEnumerable 派生的类型的符号,以及 任务Lazy 类的符号,以指示集合项、 Task.Result 属性或 Lazy.Value 属性的值可以为 null。

示例

public void Foo([ItemCanBeNull]List<string> books) { foreach (var book in books) { // Warning: Possible 'System.NullReferenceException' Console.WriteLine(book.ToUpper()); } }

欲了解更多信息,请参阅 值和可空性分析

StringFormatMethodAttribute

表示标记的方法通过格式模式和(可选)参数构建字符串。 接受格式字符串的参数应在构造函数中指定。 格式字符串应类似于 System.String.Format(System.IFormatProvider,System.String,System.Object[]) 的形式。

示例

[StringFormatMethod("message")] void ShowError(string message, params object[] args) { /* do something */ } void Foo() { ShowError("Failed: {0}"); // Warning: Non-existing argument in format string }

另请参阅

StructuredMessageTemplateAttribute

成员

  • #ctor(System.String) 指定注解方法的哪个参数应被视为格式字符串。

欲了解更多信息,请参阅 在自定义字符串格式化方法中

StructuredMessageTemplateAttribute

表示标记的参数是一个消息模板,其中的占位符将按照它们出现的顺序被后续的参数替换。

示例

void LogInfo([StructuredMessageTemplate]string message, params object[] args) { /* do something */ } void Foo() { LogInfo("User created: {username}"); // Warning: Non-existing argument in format string }

另请参阅

StringFormatMethodAttribute

有关更多信息,请参见 代码分析和字符串字面量的辅助功能

ValueProviderAttribute

使用此注解指定包含用于注解属性/字段/参数的静态或常量字段值的类型。 指定的类型将用于改进代码补全建议。

示例

namespace TestNamespace { public class Constants { public static int INT_CONST = 1; public const string STRING_CONST = "1"; } public class Class1 { [ValueProvider("TestNamespace.Constants")] public int myField; public void Foo([ValueProvider("TestNamespace.Constants")] string str) { } public void Test() { Foo(/*try completion here*/);// myField = /*try completion here*/ } } }

ValueRangeAttribute

表示整数值落在指定的区间内。 允许指定多个不相交的区间。 区间边界的值包含在区间内。

示例

void Foo([ValueRange(0, 100)] int value) { if (value == -1) { // Warning: Expression is always 'false' ... } }

NonNegativeValueAttribute

表示整数值永远不会低于零。

示例

void Foo([NonNegativeValue] int value) { if (value == -1) { // Warning: Expression is always 'false' ... } }

欲了解更多信息,请参阅 整数值分析(整数运算)

InvokerParameterNameAttribute

表示函数参数应为字符串字面量,并与调用函数的某个参数匹配。 此注解用于类似于 string paramName 参数的 System.ArgumentNullException 构造函数的参数。

示例

void Foo(string param) { if (param == null) throw new ArgumentNullException("par"); // Warning: Cannot resolve symbol }

NotifyPropertyChangedInvocatorAttribute

表示该方法包含在实现 System.ComponentModel.INotifyPropertyChanged 接口的类型中,并且此方法用于通知某些属性值已更改。

该方法应为非静态,并符合支持的签名之一:

  • NotifyChanged(string)

  • NotifyChanged(params string[])

  • NotifyChanged{T}(Expression{Func{T}})

  • NotifyChanged{T,U}(Expression{Func{T,U}})

  • SetProperty{T}(ref T, T, string)

示例

public class Foo : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; [NotifyPropertyChangedInvocator] protected virtual void NotifyChanged(string propertyName) { ... } string _name; public string Name { get { return _name; } set { _name = value; NotifyChanged("LastName"); /* Warning */ } } }

生成的通知示例:

  • NotifyChanged("Property")

  • NotifyChanged(() => Property)

  • NotifyChanged((VM x) => x.Property)

  • SetProperty(ref myField, value, "Property")

ContractAnnotationAttribute

描述方法输入和输出之间的依赖关系。

语法

函数定义表语法:

  • FDT ::= FDTRow [;FDTRow]*

  • FDTRow ::= Input => Output | Output <= Input

  • Input ::= ParameterName: Value [, Input]*

  • Output ::= [ParameterName: Value]* {halt|stop|void|nothing|Value}

  • Value ::= true | false | null | notnull | canbenull

如果方法只有一个输入参数,可以省略其名称。
使用 halt (或 void/无任何内容 ,效果相同)作为方法输出,表示该方法不会正常返回(抛出异常或终止进程)。
canbenull 值仅适用于输出参数。
您可以为每个 FDT 行使用多个 [ContractAnnotation] ,或者使用以分号分隔的单个属性。 行的顺序无关紧要,所有行都会被检查适用性,并根据分析引擎跟踪的每个程序状态应用。

示例

  • [ContractAnnotation("=> halt")] public void TerminationMethod()
  • [ContractAnnotation("null <= param:null")] // reverse condition syntax public string GetName(string surname)
  • [ContractAnnotation("s:null => true")] public bool IsNullOrEmpty(string s) // string.IsNullOrEmpty()
  • // A method that returns null if the parameter is null, // and not null if the parameter is not null [ContractAnnotation("null => null; notnull => notnull")] public object Transform(object data)
  • [ContractAnnotation("=> true, result: notnull; => false, result: null")] public bool TryParse(string s, out Person result)

有关更多信息,请参见 契约注解

LocalizationRequiredAttribute

表示标记的元素是否应被本地化。

示例

[LocalizationRequiredAttribute(true)] class Foo { string str = "my string"; // Warning: Localizable string }

CannotApplyEqualityOperatorAttribute

表示标记类型(或其派生类型)的值不能使用 ==!= 运算符进行比较,而应使用 Equals()。 但是,使用 ==!=null 进行比较始终是允许的。

示例

[CannotApplyEqualityOperator] class NoEquality { } class UsesNoEquality { void Test() { var ca1 = new NoEquality(); var ca2 = new NoEquality(); if (ca1 != null) { // OK bool condition = ca1 == ca2; // Warning } } }

有关更多信息,请参见 代码检查:标记为 'CannotApplyEqualityOperatorAttribute' 的类型的值应使用 'Equals()' 进行比较

DefaultEqualityUsageAttribute

表示方法或类型使用了注解元素的相等性成员。

当应用于方法的泛型参数时,表示使用了注解类型的相等性,除非在调用此方法时传递了自定义相等性比较器。 该属性还可以直接应用于方法的参数或返回类型,以指定其相等性使用。 当应用于类型的泛型参数时,表示类型相等性使用可以发生在此类型的任何地方,因此此类型的实例化被视为相等性使用,除非在构造函数中传递了自定义相等性比较器。

示例

struct StructWithDefaultEquality { } class MySet<[DefaultEqualityUsage] T> { } static class Extensions { public static MySet<T> ToMySet<[DefaultEqualityUsage] T>(this IEnumerable<T> items) => new(); } class MyList<T> { public int IndexOf([DefaultEqualityUsage] T item) => 0; } class UsesDefaultEquality { void Test() { var list = new MyList<StructWithDefaultEquality>(); list.IndexOf(new StructWithDefaultEquality()); // Warning: Default equality of struct 'StructWithDefaultEquality' is used var set = new MySet<StructWithDefaultEquality>(); // Warning: Default equality of struct 'StructWithDefaultEquality' is used var set2 = new StructWithDefaultEquality[1].ToMySet(); // Warning: Default equality of struct 'StructWithDefaultEquality' is used } }

欲了解更多信息,请参阅 代码检查:默认结构相等性的使用

BaseTypeRequiredAttribute

当应用于目标属性时,指定任何带有目标属性标记的类型必须实现或继承特定类型。

示例

[BaseTypeRequired(typeof(IComponent)] // Specify requirement class ComponentAttribute : Attribute { } [Component] // ComponentAttribute requires implementing IComponent interface class MyComponent : IComponent { }

UsedImplicitlyAttribute

表示标记的符号被隐式使用(通过反射、外部库等),因此此符号将在使用检查检查中被忽略。
您可以使用 ImplicitUseKindFlagsImplicitUseTargetFlags 配置此属性的应用方式。

示例

[UsedImplicitly] public class TypeConverter {} public class SummaryData { [UsedImplicitly(ImplicitUseKindFlags.InstantiatedWithFixedConstructorSignature)] public SummaryData() {} } [UsedImplicitly(ImplicitUseTargetFlags.WithInheritors | ImplicitUseTargetFlags.Default)] public interface IService {}

MeansImplicitUseAttribute

可以应用于属性、类型参数以及从 System.Type 可分配的类型的参数。 当应用于属性时,装饰的属性行为与 UsedImplicitlyAttribute 相同。 当应用于类型参数或类型为 System.Type 的参数时,表示相应的类型被隐式使用。

PublicAPIAttribute

此属性旨在标记不应被移除的公开可用 API,因此永远不应被报告为未使用。

InstantHandleAttribute

告知代码分析引擎参数是否在调用的方法位于堆栈上时完全处理。 如果参数是委托,表示该委托只能在方法执行期间被调用(委托可以被调用零次或多次,但不能存储到某个字段中并在包含方法不再位于执行堆栈时调用)。 如果参数是可枚举的,表示它在方法执行时被枚举。 如果 RequireAwait 为 true,则仅当方法调用位于 await 表达式下时,此属性才会生效。

成员

  • RequireAwait

    要求方法调用在 await 表达式下使用,此属性才会生效。 可用于 异步 方法的委托/可枚举参数。

PureAttribute

表示该方法不会进行任何可观察的状态更改。 与 System.Diagnostics.Contracts.PureAttribute 相同。

示例

[Pure] int Multiply(int x, int y) => x * y; void M() { Multiply(123, 42); // Warning: Return value of pure method is not used }

MustUseReturnValueAttribute

表示方法调用的返回值必须被使用。

用此属性装饰的方法(与纯方法相反)可能会更改状态,但如果不使用其返回值则没有意义。
类似于 PureAttribute ,此属性将有助于检测未使用返回值的方法调用。 可选地,您可以指定用于显示警告的消息,例如:

[MustUseReturnValue("Use the return value to...")]

MustDisposeResourceAttribute

表示资源的释放必须在使用站点处理,这意味着资源的所有权被转移给调用者。 此注解可用于单独注解可释放类型或其构造函数,以便在创建此类型的新实例的每个上下文中启用 IDE 代码分析的资源释放。 工厂方法和 参数也可以注解,以指示可释放类型的返回值需要处理。

对输入参数使用此属性进行注解是没有意义的。
如果类型被注解,构造函数将从其类型继承此属性,但不会从其委托的基类构造函数继承(如果有的话)。
资源释放应通过 using (resource) 语句、 using var 声明、显式 Dispose() 调用,或将资源作为参数传递给带有 HandlesResourceDisposalAttribute 属性注解的参数来完成。

成员

  • 当设置为 false 时,资源的释放不是强制性的。 显式 [MustDisposeResource(false)] 注解的主要用例是放宽对继承者的注解要求。

此注解会触发 资源释放分析 和相应的 内嵌提示

HandlesResourceDisposalAttribute

表示方法或类实例获取资源所有权,并将在使用后释放资源。

参数使用此属性进行注解是没有意义的。
当实例方法被此属性注解时,表示它正在处理相应资源实例的资源释放。
当字段或属性被此属性注解时,表示此类型拥有资源,并将正确处理资源释放(例如,在其自己的 IDisposable 实现中)。

RequireStaticDelegateAttribute

此注解允许为性能关键的 API 强制执行无分配的委托使用模式。 当此注解应用于委托类型的参数时,IDE 会检查此参数的输入参数:* 当 lambda 表达式或匿名方法作为参数传递时,IDE 会验证传递的闭包没有捕获包含的局部变量,并且编译器能够缓存委托实例以避免堆分配。 否则,将生成警告。 * 当方法名称或局部函数名称作为参数传递时,IDE 会发出警告,因为这总是会导致委托实例的堆分配。

在 C# 9.0+ 代码中,IDE 还会建议使用 静态 修饰符注解匿名函数,以利用语言/编译器提供的类似分析。

有关更多信息,请参见 代码检查:Lambda 表达式/匿名方法不得捕获其包含上下文

ProvidesContextAttribute

表示某些类型的成员或参数应被用作获取该类型值的唯一方式。 当您有某些“上下文”值被计算并存储在某处时,此注解非常有用,这意味着获取此值的所有其他方式必须与现有方式合并。

示例

class Foo { [ProvidesContext] IBarService _barService = ...; void ProcessNode(INode node) { DoSomething(node, node.GetGlobalServices().Bar); // ^ Warning: use value of '_barService' field } }

PathReferenceAttribute

表示参数是 Web 项目中某个文件或文件夹的路径。 路径可以是相对路径或绝对路径,从 Web 根目录(~)开始。

SourceTemplateAttribute

带有此属性标记的扩展方法会作为“源模板”由代码补全处理。 当扩展方法在某个表达式上完成时,其源代码会在调用点自动展开为模板。

模板方法体可以包含有效的源代码和/或以“$”开头的特殊注释。 这些注释中的文本在应用模板时会作为源代码添加。 模板参数可以用作附加方法参数或用两个“$”符号包裹的标识符。 使用 MacroAttribute 属性为参数指定宏。 用于展开的表达式可以通过 Target 参数进行调整。

示例

在此示例中, forEach 方法是一个源模板,可用于所有可枚举类型的值,生成一个普通的 C# foreach 语句并将光标放置在块内:

[SourceTemplate] public static void forEach<T>(this IEnumerable<T> xs) { foreach (var x in xs) { //$ $END$ } }

成员

  • 目标

    允许为模板执行捕获表达式,如果在展开点有多个表达式可用。 如果未指定,则假定为 Inner

MacroAttribute

允许为 SourceTemplateAttribute 的参数指定宏。

您可以将属性应用于整个方法或其任何附加参数。 宏表达式在 Expression 属性中定义。 当应用于方法时,目标模板参数在 Target 属性中定义。 要为参数静默应用宏,请将 Editable 属性值设置为 -1。

示例

将属性应用于源模板方法:

[SourceTemplate, Macro(Target = "item", Expression = "suggestVariableName()")] public static void forEach<T>(this IEnumerable<T> collection) { foreach (var item in collection) { //$ $END$ } }

将属性应用于模板方法参数:

[SourceTemplate] public static void something(this Entity x, [Macro(Expression = "guid()", Editable = -1)] string newguid) { /*$ var $x$Id = "$newguid$" + x.ToString(); x.DoSomething($x$Id); */ }

成员

  • 表达式

    允许为 SourceTemplateAttribute 参数指定在模板展开时执行的宏。

  • 可编辑

    允许指定目标参数的出现次数,该参数在模板部署时变为可编辑。

    如果目标参数在模板中多次使用,则只有一个出现变为可编辑;其他出现会同步更改。 要指定可编辑出现的从零开始的索引,请使用值 >= 0。 要使参数在模板展开时不可编辑,请使用 -1。

  • 目标

    如果 MacroAttribute 应用于模板方法,则标识 SourceTemplateAttribute 的目标参数。

CollectionAccessAttribute

表示方法、构造函数调用或集合类型的属性访问如何影响集合的内容。 当应用于方法的返回值时,表示返回的集合是专为调用者创建的(CollectionAccessType.UpdatedContent ),还是可以从外部读取/更新(CollectionAccessType.Read/CollectionAccessType.UpdatedContent)。 使用 CollectionAccessType 指定访问类型。

仅当所有集合方法都标记有此属性时,使用此属性才有意义。

示例

public class MyStringCollection : List<string> { [CollectionAccess(CollectionAccessType.Read)] public string GetFirstString() { return this.ElementAt(0); } } class Test { public void Foo() { // Warning: Contents of the collection is never updated var col = new MyStringCollection(); string x = col.GetFirstString(); } }

欲了解更多信息,请参阅 集合访问分析

AssertionMethodAttribute

表示标记的方法是一个断言方法,即如果满足某个条件,它会中止控制流。 要设置条件,请使用 AssertionConditionAttribute 属性标记其中一个参数。

AssertionConditionAttribute

表示断言方法的条件参数。 方法本身应由 AssertionMethodAttribute 属性标记。 该属性的必需参数是断言类型。

TerminatesProgramAttribute

表示标记的方法无条件终止控制流执行。 例如,它可能无条件抛出异常。

LinqTunnelAttribute

表示该方法是一个纯 LINQ 方法,具有延迟枚举(如 Enumerable.SelectEnumerable.Where)。 此注解允许通过分析 LINQ 方法链推断 [InstantHandle] 注解,用于委托类型的参数。

NoEnumerationAttribute

表示作为参数传递的 IEnumerable 未被枚举。 使用此注解以抑制“可能多次枚举 IEnumerable”的检查。

示例

static void ThrowIfNull<T>([NoEnumeration] T v, string n) where T : class { // custom check for null but no enumeration } void Foo(IEnumerable<string> values) { ThrowIfNull(values, nameof(values)); var x = values.ToList(); // No warnings about multiple enumeration }

RegexPatternAttribute

表示标记的参数、字段或属性是一个正则表达式模式。

有关更多信息,请参见 正则表达式辅助功能

LanguageInjectionAttribute

表示标记的参数、字段或属性接受包含指定语言代码片段的字符串字面量。

示例

void Foo([LanguageInjection(InjectedLanguage.CSS, Prefix = "body{", Suffix = "}")] string cssProps) { // cssProps should only contain a list of CSS properties }

示例

void Bar([LanguageInjection("json")] string json) { }

成员

  • InjectedLanguage

    指定注入代码片段的语言。

  • InjectedLanguageName

    指定注入代码片段的语言名称。

  • 前缀

    指定“前置”于注入字符串字面量的字符串。

  • 后缀

    指定“后置”于注入字符串字面量的字符串。

欲了解更多信息,请参阅 使用 [LanguageInjectionAttribute]

NoReorderAttribute

防止 IDE 中的成员重排序功能对标记类的成员进行调整。

必须在您的成员重排序模式中提到该属性。

有关更多信息,请参见 使用文件和类型布局模式重新排列成员

CodeTemplateAttribute

使用结构化搜索和替换语法定义代码搜索模式。 它允许您查找并在必要时替换与特定模式匹配的代码块。

搜索和替换模式由文本部分和占位符组成。 文本部分必须仅包含目标语言中允许的标识符,并将精确匹配(忽略空格、制表符和换行符)。 占位符允许匹配目标代码块的可变部分。
占位符具有以下格式: $placeholder_name$ - 其中 placeholder_name 是一个任意标识符。 预定义占位符:

  • $this$ - 包含类型的表达式

  • $thisType$ - 包含类型

  • $member$ - 当前成员占位符

  • $qualifier$ - 此占位符在替换模式中可用,可用于插入与 $member$ 占位符匹配的限定表达式。 (请注意,如果使用 $qualifier$ 占位符,则 $member$ 占位符将仅匹配限定引用)

  • $expression$ - 任何类型的表达式

  • $identifier$ - 标识符占位符

  • $args$ - 任意数量的参数

  • $arg$ - 单个参数

  • $arg1$ ... $arg10$ - 单个参数

  • $stmts$ - 任意数量的语句

  • $stmt$ - 单个语句

  • $stmt1$ ... $stmt10$ - 单个语句

  • $name{Expression, 'Namespace.FooType'}$ - 具有 Namespace.FooType 类型的表达式

  • $expression{'Namespace.FooType'}$ - 具有 Namespace.FooType 类型的表达式

  • $name{Type, 'Namespace.FooType'}$ - Namespace.FooType 类型

  • $type{'Namespace.FooType'}$ - Namespace.FooType 类型

  • $statement{1,2}$ - 1 或 2 条语句

您还可以定义支持类型的自定义占位符,并为每种占位符类型指定参数。 这可以使用以下格式完成: $name{type, arguments}$。 其中 名称 - 是占位符的名称, 类型 - 是占位符的类型(以下之一:Expression、Type、Identifier、Statement、Argument、Member), 实参 - 是占位符的参数列表。 每种占位符类型支持其自己的参数。 请查看以下示例以获取更多详细信息。 如果占位符名称具有以下前缀之一,则可以省略占位符类型,并从占位符名称中确定:

  • expr, expression - 表达式占位符,例如 $exprPlaceholder{}$, $expressionFoo{}$

  • arg, argument - 参数占位符,例如 $argPlaceholder{}$, $argumentFoo{}$

  • ident, identifier - 标识符占位符,例如 $identPlaceholder{}$, $identifierFoo{}$

  • stmt, statement - 语句占位符,例如 $stmtPlaceholder{}$, $statementFoo{}$

  • type - 类型占位符,例如 $typePlaceholder{}$, $typeFoo{}$

  • member - 成员占位符,例如 $memberPlaceholder{}$, $memberFoo{}$

表达式占位符参数:

  • expressionType - 单引号中的字符串值,指定要匹配的完整类型名称(默认值为空字符串)

  • exactType - 布尔值,指定表达式是否应具有精确的类型匹配(默认值为 false)

示例:

  • $myExpr{Expression, 'Namespace.FooType', true}$ - 定义一个表达式占位符,匹配具有 Namespace.FooType 类型的表达式,并进行精确匹配。

  • $myExpr{Expression, 'Namespace.FooType'}$ - 定义一个表达式占位符,匹配具有 Namespace.FooType 类型的表达式或可以隐式转换为 Namespace.FooType 的表达式。

  • $myExpr{Expression}$ - 定义一个表达式占位符,匹配任何类型的表达式。

  • $exprFoo{'Namespace.FooType', true}$ - 定义一个表达式占位符,匹配具有 Namespace.FooType 类型的表达式,并进行精确匹配。

类型占位符参数:

  • type - 单引号中的字符串值,指定要匹配的完整类型名称(默认值为空字符串)

  • exactType - 布尔值,指定表达式是否应具有精确的类型匹配(默认值为 false)

示例:

  • $myType{Type, 'Namespace.FooType', true}$ - 定义一个类型占位符,匹配具有 Namespace.FooType 类型的类型,并进行精确匹配。

  • $myType{Type, 'Namespace.FooType'}$ - 定义一个类型占位符,匹配具有 Namespace.FooType 类型的类型或可以隐式转换为 Namespace.FooType 的类型。

  • $myType{Type}$ - 定义一个类型占位符,匹配任何类型。

  • $typeFoo{'Namespace.FooType', true}$ - 定义一个类型占位符,匹配具有 Namespace.FooType 类型的类型,并进行精确匹配。

标识符占位符参数:

  • nameRegex - 单引号中的字符串值,指定用于匹配的正则表达式(默认值为空字符串)

  • nameRegexCaseSensitive - 布尔值,指定名称正则表达式是否区分大小写(默认值为 true)

  • type - 单引号中的字符串值,指定要匹配的完整类型名称(默认值为空字符串)

  • exactType - 布尔值,指定表达式是否应具有精确的类型匹配(默认值为 false)

示例:

  • $myIdentifier{Identifier, 'my.*', false, 'Namespace.FooType', true}$ - 定义一个标识符占位符,匹配以 我的 前缀开头且具有 Namespace.FooType 类型的标识符(忽略大小写)。

  • $myIdentifier{Identifier, 'my.*', true, 'Namespace.FooType', true}$ - 定义一个标识符占位符,匹配以 我的 前缀开头且具有 Namespace.FooType 类型的标识符(区分大小写)。

  • $identFoo{'my.*'}$ - 定义一个标识符占位符,匹配以 我的 前缀开头的标识符(区分大小写)。

语句占位符参数:

  • minimalOccurrences - 要匹配的语句的最小数量(默认值为 -1)

  • maximalOccurrences - 要匹配的语句的最大数量(默认值为 -1)

示例:

  • $myStmt{Statement, 1, 2}$ - 定义一个语句占位符,匹配 1 或 2 条语句。

  • $myStmt{Statement}$ - 定义一个语句占位符,匹配任意数量的语句。

  • $stmtFoo{1, 2}$ - 定义一个语句占位符,匹配 1 或 2 条语句。

参数占位符参数:

  • minimalOccurrences - 要匹配的参数的最小数量(默认值为 -1)

  • maximalOccurrences - 要匹配的参数的最大数量(默认值为 -1)

示例:

  • $myArg{Argument, 1, 2}$ - 定义一个参数占位符,匹配 1 或 2 个参数。

  • $myArg{Argument}$ - 定义一个参数占位符,匹配任意数量的参数。

  • $argFoo{1, 2}$ - 定义一个参数占位符,匹配 1 或 2 个参数。

成员占位符参数:

  • docId - 单引号中的字符串值,指定要匹配的成员的 XML 文档 ID(默认值为空)

示例:

  • $myMember{Member, 'M:System.String.IsNullOrEmpty(System.String)'}$ - 定义一个成员占位符,匹配 IsNullOrEmpty 类型的 System.String 成员。

  • $memberFoo{'M:System.String.IsNullOrEmpty(System.String)'}$ - 定义一个成员占位符,匹配 IsNullOrEmpty 类型的 System.String 成员。

成员

  • SearchTemplate

    结构化搜索模式。

    模式包括一个文本部分,该部分必须仅包含目标语言中允许的标识符和用于匹配目标代码块可变部分的占位符。

  • 消息

    当找到与搜索模式匹配的代码块时显示的消息。

    您还可以在消息文本前添加“Error:”、“Warning:”、“Suggestion:”或“Hint:”前缀,以指定模式的严重性。 带有替换模板的代码模式默认具有“Suggestion”严重性。 如果未提供替换模式,则该模式将具有“Warning”严重性。

  • ReplaceTemplate

    用于替换匹配模式的替换模式。

  • ReplaceMessage

    在提示灯泡中显示的替换消息。

  • FormatAfterReplace

    代码替换后应用代码格式化。

  • MatchSimilarConstructs

    是否应匹配类似的代码块。

  • ShortenReferences

    在应用模板后自动插入命名空间导入指令或移除变得多余的限定符。

  • SuppressionKey

    用作抑制键的字符串。 默认情况下,使用以下抑制键: CodeTemplate_SomeType_SomeMember ,其中“SomeType”和“SomeMember”是应用此属性的相关包含类型和成员的名称。

有关更多信息,请参见 报告并更新已弃用的 API

IgnoreSpellingAndGrammarErrorsAttribute

表示传递给此参数的字符串字面量不应检查拼写或语法错误。

有关更多信息,请参见 语法和拼写分析

AspMvcActionAttribute

ASP.NET MVC 属性。 如果应用于参数,表示该参数是一个 MVC 操作。 如果应用于方法,则 MVC 操作名称从上下文中隐式计算。 将此属性用于类似于 System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String) 的自定义包装器。

AspMvcAreaAttribute

ASP.NET MVC 属性。 表示标记的参数是一个 MVC 区域。 将此属性用于类似于 System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String) 的自定义包装器。

AspMvcControllerAttribute

ASP.NET MVC 属性。 如果应用于参数,表示该参数是一个 MVC 控制器。 如果应用于方法,则 MVC 控制器名称从上下文中隐式计算。 将此属性用于类似于 System.Web.Mvc.Html.ChildActionExtensions.RenderAction(HtmlHelper, String, String) 的自定义包装器。

AspMvcMasterAttribute

ASP.NET MVC 属性。 表示标记的参数是一个 MVC 主视图。 将此属性用于类似于 System.Web.Mvc.Controller.View(String, String) 的自定义包装器。

AspMvcModelTypeAttribute

ASP.NET MVC 属性。 表示标记的参数是一个 MVC 模型类型。 将此属性用于类似于 System.Web.Mvc.Controller.View(String, Object) 的自定义包装器。

AspMvcPartialViewAttribute

ASP.NET MVC 属性。 如果应用于参数,表示该参数是一个 MVC 部分视图。 如果应用于方法,则 MVC 部分视图名称从上下文中隐式计算。 将此属性用于类似于 System.Web.Mvc.Html.RenderPartialExtensions.RenderPartial(HtmlHelper, String) 的自定义包装器。

AspMvcSuppressViewErrorAttribute

ASP.NET MVC 属性。 允许在类或方法中禁用对 MVC 视图的检查。

AspMvcDisplayTemplateAttribute

ASP.NET MVC 属性。 表示参数是一个 MVC 显示模板。 将此属性用于类似于 System.Web.Mvc.Html.DisplayExtensions.DisplayForModel(HtmlHelper, String) 的自定义包装器。

AspMvcEditorTemplateAttribute

ASP.NET MVC 属性。 表示标记的参数是一个 MVC 编辑器模板。 将此属性用于类似于 System.Web.Mvc.Html.EditorExtensions.EditorForModel(HtmlHelper, String) 的自定义包装器。

AspMvcTemplateAttribute

ASP.NET MVC 属性。 表示标记的参数是一个 MVC 模板。 将此属性用于类似于 System.ComponentModel.DataAnnotations.UIHintAttribute(System.String) 的自定义包装器。

AspMvcViewAttribute

ASP.NET MVC 属性。 如果应用于参数,表示该参数是一个 MVC 视图组件。 如果应用于方法,则 MVC 视图名称从上下文中隐式计算。 将此属性用于类似于 System.Web.Mvc.Controller.View(Object) 的自定义包装器。

AspMvcViewComponentAttribute

ASP.NET MVC 属性。 如果应用于参数,表示该参数是一个 MVC 视图组件名称。

AspMvcViewComponentViewAttribute

ASP.NET MVC 属性。 如果应用于参数,表示该参数是一个 MVC 视图组件视图。 如果应用于方法,则 MVC 视图组件视图名称为默认值。

AspMvcActionSelectorAttribute

ASP.NET MVC 属性。 当应用于属性的参数时,表示此参数是一个 MVC 操作名称。

示例

[ActionName("Foo")] public ActionResult Login(string returnUrl) { ViewBag.ReturnUrl = Url.Action("Foo"); // OK return RedirectToAction("Bar"); // Error: Cannot resolve action }

RouteTemplateAttribute

表示标记的参数、字段或属性是一个路由模板。

此属性允许 IDE 识别 Web 框架的路由模板,以在字符串字面量中启用语法高亮、代码补全、导航、重命名和其他功能。

RouteParameterConstraintAttribute

表示标记的类型是自定义路由参数约束,该约束在应用程序的 Startup 中以名称 ConstraintName 注册。

如果目标约束仅匹配特定类型的路由参数,您可以指定 ProposedType ,这将允许 IDE 从路由模板的使用中创建具有指定类型的方法参数,而不是默认的 System.String ,并检查约束的建议类型是否与匹配参数的类型冲突。

UriStringAttribute

表示标记的参数、字段或属性是一个 URI 字符串。

此属性启用分配给注解参数、字段或属性的 URI 字符串字面量的代码补全、导航、重命名和其他功能。

AspRouteConventionAttribute

表示标记的方法声明了 ASP.NET 的路由约定。

IDE 将分析带有此属性标记的方法的所有用法,并将所有路由添加到 URI 字符串上的补全、导航和其他功能中。

AspDefaultRouteValuesAttribute

表示标记的方法参数包含 ASP.NET 路由约定的默认路由值。

AspRouteValuesConstraintsAttribute

表示标记的方法参数包含 ASP.NET 路由约定的路由值约束。

AspRouteOrderAttribute

表示标记的参数或属性包含由 ASP.NET 路由属性提供的路由顺序。

AspRouteVerbsAttribute

表示标记的参数或属性包含由 ASP.NET 路由属性提供的 HTTP 动词。

AspAttributeRoutingAttribute

表示标记的属性用于 ASP.NET 中的属性路由。

IDE 将分析带有此属性标记的属性的所有用法,并将所有路由添加到 URI 字符串上的补全、导航和其他功能中。

AspMinimalApiDeclarationAttribute

表示标记的方法声明了一个 ASP.NET Minimal API 端点。

IDE 将分析带有此属性标记的方法的所有用法,并将所有路由添加到 URI 字符串上的补全、导航和其他功能中。

AspMinimalApiGroupAttribute

表示标记的方法声明了一个 ASP.NET Minimal API 端点组。

AspMinimalApiHandlerAttribute

表示标记的参数包含一个 ASP.NET Minimal API 端点处理程序。

AspMinimalApiImplicitEndpointDeclarationAttribute

表示标记的方法包含 Minimal API 端点声明。

IDE 将分析带有此属性标记的方法的所有用法,并将属性中声明的所有路由添加到 URI 字符串上的补全、导航和其他功能中。

成员

  • QueryParameters

    用逗号分隔的端点定义的查询参数列表。

RazorSectionAttribute

Razor 属性。 表示标记的参数或方法是一个 Razor 部分。 将此属性用于类似于 System.Web.WebPages.WebPageBase.RenderSection(String) 的自定义包装器。

XamlItemsControlAttribute

XAML 属性。 表示具有 ItemsSource 属性的类型,应被视为 ItemsControl 派生类型,以启用内部项 DataContext 类型解析。

XamlItemBindingOfItemsControlAttribute

XAML 属性。 表示某些 BindingBase 派生类型的属性,用于绑定某些 ItemsControl 派生类型的项。 此注解将为这些属性的 XAML 绑定启用 DataContext 类型解析。

该属性应具有 ItemsControl 类型的树祖先,或标记为 XamlItemsControlAttribute 属性。

XamlItemStyleOfItemsControlAttribute

XAML 属性。 表示某些 样式 派生类型的属性,用于为某些 ItemsControl 派生类型的项设置样式。 此注解将为这些属性的 XAML 绑定启用 DataContext 类型解析。

属性应具有 ItemsControl 类型的树祖先,或标记为 XamlItemsControlAttribute 属性。

XamlOneWayBindingModeByDefaultAttribute

XAML 属性。 表示 DependencyProperty 默认具有 OneWay 绑定模式。

如果存在 DependencyProperty 的 CLR 访问器属性,则必须将此属性应用于该属性;否则,必须应用于 DependencyProperty 描述符字段。

XamlTwoWayBindingModeByDefaultAttribute

XAML 属性。 表示 DependencyProperty 默认具有 TwoWay 绑定模式。

如果存在 DependencyProperty 的 CLR 访问器属性,则必须将此属性应用于该属性;否则,必须应用于 DependencyProperty 描述符字段。

TestSubjectAttribute

指定由测试类或测试方法测试的类型。

此信息可供 IDE 在测试和被测试类型之间导航,或供测试运行器按主题对测试进行分组并提供更好的测试报告。

成员

  • 主题

    获取被测试的类型。

  • #ctor(System.Type)

    使用指定的被测试类型初始化 TestSubjectAttribute 类的新实例。

    被测试的类型。

有关更多信息,请参见 在测试与被测试代码之间导航

MeansTestSubjectAttribute

将泛型参数标记为测试类的测试对象。

可以应用于基测试类的泛型参数,以指示作为参数传递的类型是被测试的类。 此信息可供 IDE 在测试和被测试类型之间导航,或供测试运行器按主题对测试进行分组并提供更好的测试报告。

示例

public class BaseTestClass<[MeansTestSubject] T> { protected T Component { get; } } public class CalculatorAdditionTests : BaseTestClass<Calculator> { [Test] public void Should_add_two_numbers() { Assert.That(Component.Add(2, 3), Is.EqualTo(5)); } }

欲了解更多信息,请参阅 在测试与被测试代码之间导航

辅助类型

ImplicitUseKindFlags

指定当标记为 MeansImplicitUseAttributeUsedImplicitlyAttribute 时隐式使用符号的详细信息。

成员

  • 权限

    仅标记有属性的实体被视为已使用。

  • 分配

    表示隐式分配给成员。

  • InstantiatedWithFixedConstructorSignature

    表示具有固定构造函数签名的类型的隐式实例化。 这意味着任何未使用的构造函数参数都不会被报告。

  • InstantiatedNoFixedConstructorSignature

    表示类型的隐式实例化。

ImplicitUseTargetFlags

指定当标记为 MeansImplicitUseAttributeUsedImplicitlyAttribute 时被视为隐式使用的内容。

成员

  • 成员

    标记有属性的类型的成员被视为已使用。

  • WithInheritors

    继承的实体被视为已使用。

  • WithMembers

    标记有属性的实体及其所有成员被视为已使用。

SourceTemplateTargetExpression

SourceTemplateAttribute 提供一个值,以定义如何在展开点捕获表达式。

成员

  • Inner

    选择内部表达式

    示例: value > 42.{caret} 捕获 42

    示例: _args = args.{caret} 捕获 实参

  • Outer

    选择外部表达式

    示例: value > 42.{caret} 捕获 value > 42

    示例: _args = args.{caret} 捕获整个赋值

欲了解更多信息,请参阅 目标表达式

CollectionAccessType

CollectionAccessAttribute 提供一个值,以定义集合方法调用如何影响集合的内容。

成员

  • 方法不使用或修改集合的内容。

  • 读取

    方法仅读取集合的内容,但不修改它。

  • ModifyExistingContent

    方法可以更改集合的内容,但不会添加新元素。

  • UpdatedContent

    方法可以向集合添加新元素。

AssertionConditionType

指定断言类型。 如果断言方法参数满足条件,则继续执行。 否则,假定执行已中止。

成员

  • IS_TRUE

    标记的参数应评估为 true。

  • IS_FALSE

    标记的参数应评估为 false。

  • IS_NULL

    标记的参数应评估为 null 值。

  • IS_NOT_NULL

    标记的参数应评估为非 null 值。

InjectedLanguage

标记为 LanguageInjectionAttribute 的字符串字面量中注入代码片段的语言。

有关更多信息,请参见 使用 [LanguageInjectionAttribute]

最后修改日期: 2025年 9月 26日