ReSharper 2024.2 ヘルプ

コードアノテーション属性

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 から派生した型のシンボルだけでなく、Task および 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 から派生した型のシンボルだけでなく、Task および 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[])(英語) -like 形式である必要があります。

サンプル

[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

関数の引数が文字列リテラルであり、呼び出し側関数のパラメーターの 1 つと一致する必要があることを示します。このアノテーションは、System.ArgumentNullException(英語) コンストラクターの string paramName パラメーターなどのパラメーターに使用されます。

サンプル

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

NotifyPropertyChangedInvocatorAttribute

System.ComponentModel.INotifyPropertyChanged インターフェースを実装する型にメソッドが含まれており、このメソッドは一部のプロパティ値が変更されたことを通知するために使用されることを示します。

メソッドは静的でなく、サポートされているシグネチャーの 1 つに準拠する必要があります。

  • 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")

詳細は、INotifyPropertyChanged のサポートを参照してください。

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/nothing、これは同じ)を使用すると、メソッドが正常に戻らない(プロセスをスローまたは終了する)ことを意味します。


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

呼び出されたメソッドがスタック上にあるときにパラメーターが完全に処理されたかどうかをコード分析エンジンに伝えます。パラメーターがデリゲートの場合、デリゲートはメソッドの実行中にのみ呼び出すことができることを示します (デリゲートは 0 回または複数回呼び出すことができますが、フィールドに格納されず、後で、含まれているメソッドが実行スタック上に存在しなくなったときに呼び出すことができます))。パラメーターが列挙可能な場合、メソッドの実行中にパラメーターが列挙されることを示します。RequireAwait が true の場合、属性はメソッド呼び出しが await 式にある場合にのみ有効になります。

メンバー

  • RequireAwait

    この属性を有効にするには、await 式でメソッド呼び出しを使用する必要があります。async メソッドのデリゲート / 列挙可能パラメーターに使用できます。

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 コード分析が可能になります。ファクトリメソッドと out パラメーターには、使い捨て型の戻り値の処理が必要であることを示すアノテーションを付けることもできます。

この属性による入力パラメーターのアノテーションは意味がありません。
コンストラクターは、アノテーションが付けられている場合はその型からこの属性を継承しますが、委譲先の基本コンストラクター (存在する場合) からは継承しません。
リソースの破棄は、using (resource) ステートメント、using var 宣言、明示的な Dispose() 呼び出し、または HandlesResourceDisposalAttribute 属性でアノテーションが付けられたパラメーターに引数としてリソースを渡すことによって行われます。

メンバー

  • Value

    false に設定すると、リソースの破棄は必須ではありません。明示的な [MustDisposeResource(false)] アノテーションの主な使用例は、継承のアノテーションを緩和することです。

このアノテーションは、破棄分析と対応するインレイヒントをトリガーします。

HandlesResourceDisposalAttribute

メソッドまたはクラスインスタンスがリソースの所有権を取得し、使用後にそれを破棄することを示します。

この属性による out パラメーターのアノテーションは意味がありません。
インスタンスメソッドにこの属性がアノテーション付けされている場合、対応するリソースインスタンスのリソース破棄を処理していることを意味します。
フィールドまたはプロパティにこの属性がアノテーション付けされている場合、この型がリソースを所有し、リソースの破棄を適切に処理することを意味します (たとえば、独自の IDisposable 実装内)。

RequireStaticDelegateAttribute

このアノテーションにより、パフォーマンスが重要な API に対して割り当てのないデリゲートの使用パターンを強制することができます。このアノテーションがデリゲート型のパラメーターに適用されると、IDE はこのパラメーターの入力引数をチェックします。* ラムダ式または匿名メソッドが引数として渡されるとき、IDE は、渡されたクロージャにそれを含むクロージャがキャプチャーされていないことを検証します。ローカル変数を使用すると、コンパイラーはデリゲートインスタンスをキャッシュしてヒープ割り当てを回避できます。それ以外の場合は、警告が生成されます。* メソッド名またはローカル関数名が引数として渡されると、常にデリゲートインスタンスのヒープ割り当てが発生するため、IDE は警告を出します。

C# 9.0+ コードでは、IDE は、言語 / コンパイラーによって提供される同様の分析を利用するために、匿名関数に static 修飾子でアノテーションを付けることも提案します。

詳細は、コード検査: ラムダ式 / 匿名メソッドには、含まれているコンテキストのキャプチャーが含まれていてはなりませんを参照してください。

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

この属性でマークされた拡張メソッドは、コード補完によって「ソーステンプレート」として処理されます。拡張メソッドが何らかの式で完了すると、そのソースコードは呼び出しサイトでテンプレートのように自動的に展開されます。

テンプレートメソッドの本体には、有効なソースコードや「$」で始まる特別なコメントを含めることができます。これらのコメント内のテキストは、テンプレートが適用されるときにソースコードとして追加されます。テンプレートパラメーターは、追加のメソッドパラメーターとして、または 2 つの '$' 記号で囲まれた識別子として使用できます。MacroAttribute 属性を使用してパラメーターのマクロを指定します。展開に使用する式はターゲットパラメーターで調整できます。

サンプル

この例では、forEach メソッドは列挙型のすべての値に対して使用可能なソーステンプレートであり、通常の C# foreach ステートメントを生成し、ブロック内にキャレットを配置します。

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

メンバー

  • Target

    展開ポイントで複数の式が使用可能な場合、テンプレートの実行のためにキャプチャーする式を指定できます。指定しない場合は、内部とみなされます。

詳細は、ソーステンプレートを参照してください。

MacroAttribute

SourceTemplateAttribute のパラメーターにマクロを指定できます。

この属性は、メソッド全体またはその追加パラメーターのいずれかに適用できます。マクロ式はプロパティで定義されます。メソッドに適用される場合、ターゲットテンプレートパラメーターはターゲットプロパティで定義されます。パラメーターにマクロをサイレントに適用するには、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); */ }

メンバー

  • Expression

    テンプレートが展開されたときに SourceTemplateAttribute パラメーターに対して実行されるマクロを指定できます。

  • Editable

    テンプレートのデプロイ時に編集可能になるターゲットパラメーターの出現を指定できます。

    ターゲットパラメーターがテンプレートで何回か使用されている場合、1 つの出現箇所だけが編集可能になります。他の発生は同期して変更されます。編集可能な出現箇所の 0 から始まるインデックスを指定するには、値> = 0 を使用します。テンプレートが展開されたときにパラメーターを編集できないようにするには、-1 を使用します。

  • Target

    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

マークされたメソッドがアサーションメソッドであることを示します。つまり、条件の 1 つが満たされると制御フローが停止します。条件を設定するには、パラメーターの 1 つを AssertionConditionAttribute 属性でマークします。

AssertionConditionAttribute

アサーションメソッドの条件パラメーターを示します。メソッド自体は AssertionMethodAttribute 属性でマークされる必要があります。属性の必須引数はアサーション型です。

TerminatesProgramAttribute

マークされたメソッドが制御フローの実行を無条件に終了することを示します。例: 無条件に例外をスローする可能性があります。

LinqTunnelAttribute

メソッドが列挙が延期された純粋な LINQ メソッドであることを示します ( Enumerable.Select または Enumerable.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

    挿入されたコードフラグメントの言語名を指定します。

  • Prefix

    挿入された文字列リテラルの「前」にある文字列を指定します。

  • Suffix

    挿入された文字列リテラルに「続く」文字列を指定します。

詳細は、[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}$ 形式を使用して実行できます。ここで、name - はプレースホルダーの名前、type - はプレースホルダーの型 (次のいずれか: 式、型、識別子、ステートメント、引数、メンバー)、arguments - プレースホルダーの引数のリストです。各プレースホルダー型は独自の引数をサポートします。詳細については、以下の例を確認してください。名前に次の接頭辞のいずれかが付いている場合、プレースホルダーの種類は省略でき、プレースホルダー名から決定できます。

  • expr、expression - 式プレースホルダー、例: $exprPlaceholder{}$$expressionFoo{}$

  • arg、argument - 引数プレースホルダー、例: $argPlaceholder{}$$argumentFoo{}$

  • ident、identifier - 識別子のプレースホルダー、例: $identPlaceholder{}$$identifierFoo{}$

  • stmt、ステートメント - ステートメントのプレースホルダー、例: $stmtPlaceholder{}$$statementFoo{}$

  • type - タイプのプレースホルダー、例: $typePlaceholder{}$$typeFoo{}$

  • member - メンバーのプレースホルダー、例: $memberPlaceholder{}$$memberFoo{}$

式のプレースホルダー引数:

  • expressionType - 一重引用符で囲まれた文字列値。一致する完全なタイプ名を指定します (デフォルトでは空の文字列)

  • 正確なタイプ - ブール値。式の型が完全に一致するかどうかを指定します (デフォルトでは false)

例:

  • $myExpr{Expression, 'Namespace.FooType', true}$ - Namespace.FooType タイプの式と完全に一致する式プレースホルダーを定義します。

  • $myExpr{Expression, 'Namespace.FooType'}$ - Namespace.FooType タイプの式、または暗黙的に Namespace.FooType に変換できる式に一致する式プレースホルダーを定義します。

  • $myExpr{Expression}$ - 任意のタイプの式に一致する式プレースホルダーを定義します。

  • $exprFoo{'Namespace.FooType', true}$ - Namespace.FooType タイプの式と完全に一致する式プレースホルダーを定義します。

プレースホルダー引数を入力します。

  • 型 - 一重引用符で囲まれた文字列値。一致する完全な型名を指定します (デフォルトでは空の文字列)

  • 正確なタイプ - ブール値。式の型が完全に一致するかどうかを指定します (デフォルトでは 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)

  • 型 - 一重引用符で囲まれた文字列値。一致する完全なタイプ名を指定します (デフォルトでは空の文字列)

  • 正確なタイプ - ブール値。式の型が完全に一致するかどうかを指定します (デフォルトでは false)

例:

  • $myIdentifier{Identifier, 'my.*', false, 'Namespace.FooType', true}$ - my 接頭辞で始まり Namespace.FooType タイプの識別子 (大文字と小文字を無視) に一致する識別子プレースホルダーを定義します。

  • $myIdentifier{Identifier, 'my.*', true, 'Namespace.FooType', true}$ - Namespace.FooType タイプの my 接頭辞で始まる識別子 (大文字と小文字を区別) に一致する識別子のプレースホルダーを定義します。

  • $identFoo{'my.*'}$ - my 接頭辞で始まる識別子 (大文字と小文字を区別) に一致する識別子のプレースホルダーを定義します。

ステートメントプレースホルダー引数:

  • 最小限の出現箇所 - 一致するステートメントの最小数 (- デフォルトでは -1)

  • maximalOccurrences - 一致するステートメントの最大数 (- デフォルトでは -1)

例:

  • $myStmt{Statement, 1, 2}$ - 1 つまたは 2 つのステートメントに一致するステートメントプレースホルダーを定義します。

  • $myStmt{Statement}$ - 任意の数のステートメントに一致するステートメントプレースホルダーを定義します。

  • $stmtFoo{1, 2}$ - 1 つまたは 2 つのステートメントに一致するステートメントプレースホルダーを定義します。

引数プレースホルダー引数:

  • 最小限の出現箇所 - 一致する引数の最小数 (- デフォルトでは -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)'}$ - System.String 型の IsNullOrEmpty メンバーに一致するメンバープレースホルダーを定義します。

  • $memberFoo{'M:System.String.IsNullOrEmpty(System.String)'}$ - System.String 型の IsNullOrEmpty メンバーに一致するメンバープレースホルダーを定義します。

メンバー

  • SearchTemplate

    構造的な検索パターン。

    パターンにはテキスト部分が含まれており、ターゲット言語で許可されている識別子と、ターゲットコードブロックの可変部分と一致するプレースホルダーのみを含める必要があります。

  • Message

    検索パターンに一致するコードブロックが見つかったときに表示するメッセージ。

    メッセージテキストの先頭に「エラー:」、「警告:」、「提案:」、または「ヒント:」の接頭辞を追加して、パターンの重大度を指定することもできます。置換テンプレートを使用したコードパターンは、デフォルトで「提案」重大度を持ちます。置換パターンが指定されていない場合、パターンの重大度は「警告」になります。

  • 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

マークされた型がカスタムルートパラメーター制約であり、アプリケーションのスタートアップに 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

マークされたメソッドに最小限の API エンドポイント宣言が含まれていることを示します。

IDE は、この属性でマークされたメソッドのすべての使用状況を分析し、属性で宣言されたすべてのルートを補完、ナビゲーション、URI 文字列上のその他の機能に追加します。

メンバー

  • QueryParameters

    エンドポイントに定義されたクエリパラメーターのコンマ区切りのリスト

RazorSectionAttribute

Razor 属性。マークされたパラメーターまたはメソッドが Razor セクションであることを示します。System.Web.WebPages.WebPageBase.RenderSection(String) に似たカスタムラッパーにこの属性を使用します。

XamlItemsControlAttribute

XAML 属性。ItemsSource プロパティを持ち、内部項目 DataContext 型解決を有効にするために ItemsControl -derived 型として扱われる必要がある型を示します。

XamlItemBindingOfItemsControlAttribute

XAML 属性。ItemsControl -derived タイプの一部の項目をバインドするために使用される、一部の BindingBase -derived タイプのプロパティを示します。このアノテーションにより、そのようなプロパティの XAML バインディングの DataContext 型解決が有効になります。

プロパティには、ItemsControl タイプのツリー祖先、または XamlItemsControlAttribute 属性でマークされたツリーが必要です。

XamlItemStyleOfItemsControlAttribute

XAML 属性。ItemsControl -derived タイプの項目のスタイルを設定するために使用される、一部の Style -derived タイプのプロパティを示します。このアノテーションにより、そのようなプロパティの XAML バインディングで DataContext 型解決が有効になります。

プロパティには、ItemsControl タイプのツリー祖先、または XamlItemsControlAttribute 属性でマークされたツリーが必要です。

XamlOneWayBindingModeByDefaultAttribute

XAML 属性。DependencyProperty にデフォルトで OneWay バインディングモードがあることを示します。

この属性は、DependencyProperty の CLR アクセサープロパティが存在する場合は適用する必要があり、存在しない場合は、DependencyProperty 記述子フィールドに適用する必要があります。

XamlTwoWayBindingModeByDefaultAttribute

XAML 属性。DependencyProperty にデフォルトで TwoWay バインディングモードがあることを示します。

この属性は、DependencyProperty の CLR アクセサープロパティが存在する場合は適用する必要があり、存在しない場合は、DependencyProperty 記述子フィールドに適用する必要があります。

TestSubjectAttribute

テストクラスまたはテストメソッドによってテストされる型を指定します。

この情報は、IDE がテストとテスト対象タイプ間を移動するために使用したり、テストランナーがサブジェクトごとにテストをグループ化し、より適切なテストレポートを提供したりするために使用できます。

メンバー

  • Subject

    テスト対象の型を取得します。

  • #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

MeansImplicitUseAttribute または UsedImplicitlyAttribute でマークされている場合に、暗黙的に使用されるシンボルの詳細を指定します。

メンバー

  • Access

    属性とマークされたエンティティのみが使用されます。

  • Assign

    メンバーへの暗黙的な割り当てを示します。

  • InstantiatedWithFixedConstructorSignature

    固定コンストラクターシグネチャーを使用した型の暗黙的なインスタンス化を示します。つまり、未使用のコンストラクターパラメーターはそのように報告されません。

  • InstantiatedNoFixedConstructorSignature

    型の暗黙的なインスタンス化を示します。

ImplicitUseTargetFlags

MeansImplicitUseAttribute または UsedImplicitlyAttribute でマークされたときに暗黙的に使用されると見なされるものを指定します。

メンバー

  • Members

    属性でマークされたタイプのメンバーは使用されていると見なされます。

  • WithInheritors

    継承されたエンティティは使用されていると見なされます。

  • WithMembers

    属性でマークされたエンティティとそのすべてのメンバーが使用されていると見なされます。

SourceTemplateTargetExpression

展開点で式をキャプチャーする方法を定義するための SourceTemplateAttribute の値を提供します

メンバー

  • Inner

    内部表現を選択します

    サンプル: value > 42.{caret}42 をキャプチャーします

    サンプル: _args = args.{caret}args をキャプチャーします

  • Outer

    外部式を選択します

    サンプル: value > 42.{caret}value > 42 をキャプチャーします

    サンプル: _args = args.{caret} は割り当て全体をキャプチャーします

詳細は、ターゲット式を参照してください。

CollectionAccessType

コレクションメソッドの呼び出しがコレクションの内容にどのように影響するかを定義するための CollectionAccessAttribute の値を提供します。

メンバー

  • None

    メソッドはコレクションのコンテンツを使用または変更しません。

  • Read

    メソッドはコレクションの内容だけを読み込みますが、コレクションは変更しません。

  • ModifyExistingContent

    メソッドはコレクションの内容を変更できますが、新しい要素は追加しません。

  • UpdatedContent

    メソッドは、新しい要素をコレクションに追加できます。

AssertionConditionType

アサーションの型を指定します。アサーションメソッドの引数が条件を満たす場合、実行は続行されます。それ以外の場合は、実行が停止されたものとみなされます。

メンバー

  • IS_TRUE

    マークされたパラメーターは true に評価されるべきです。

  • IS_FALSE

    マークされたパラメーターは false に評価されるべきです。

  • IS_NULL

    マークされたパラメーターは NULL 値に評価される必要があります。

  • IS_NOT_NULL

    マークされたパラメーターは null 値でないと評価される必要があります。

InjectedLanguage

LanguageInjectionAttribute でマークされた文字列リテラル内に挿入されたコードフラグメントの言語。

詳細は、[LanguageInjectionAttribute] を使用するを参照してください。

関連ページ:

ソースコードのアノテーション

ReSharper のコードアノテーションの恩恵を受ける最も簡単な方法は、ソースコードのシンボルにアノテーション属性を追加し、ReSharper がソリューションをより正確かつ洞察力で分析できるようにすることです。デフォルトでは、すべてのアノテーション属性クラスは属性でマークされているため、コンパイラーはコード内の属性の使用を無視します。つまり、'JetBrains.Annotations.dll' アセンブリへのバイナリ参照は生成されません。ただし、プロジェクトで「JETBRAINS_ANNO...

価値と無効性の分析

ReSharper は、可能な「null」逆参照、重複ブール比較および null ・チェックを見つけるのに役立つ値分析を実行します。Null 許容値を分析するさまざまな方法:ReSharper は、いくつかの方法で値を分析できます。言語構成体の動作を理解します。次の例では、パラメーターが明示的に null 可能性をチェックされたという事実に基づいて、ReSharper はの値が実際に 'null' であると合理的に想定し、対応する警告を表示します。null 許容参照型が無効になっている場合、コ...

文字列リテラルのコード分析とヘルパー

プレーン文字列:コードにプレーンな文字列を使って作業しているときに ReSharper がどのように役立つかは次のとおりです。デフォルトでは、ReSharper は、すべての非逐語的な文字列の正しいおよび不正なエスケープシーケンスをハイライトします。キャレットが文字列内にあるときにを押し、対応するコンテキストアクションを選択することで、通常の文字列を逐語的な文字列に変換したり、元に戻したりできます。これは、補間された文字列でも機能します。Enter を押すだけで、文字列リテラルを分割できます。...

整数値の分析 (積分演算)

ReSharper は、コード内の整数値のフローを追跡し、冗長または場合によっては誤ったステートメントを報告できます。すべての C# 整数数値型 — 、、、、 — をサポートし、次の問題について警告します。常にまたはに評価される関係 / 等式演算子、値をチェックする到達不能なケース、による乗算やの加算など、意味のない算術演算(リテラルまたは定数を除く): ReSharper は、のような式が意図的なものであると想定しています)、オーバーフローの可能性、による除算の可能性、メソッドの呼び出しで発生する可能...

INotifyPropertyChanged のサポート

インターフェースは、.NET アプリケーションで、プロパティの値が変更されたときに通知を送信するために広く使用されています。ReSharper には、このインターフェースを実装するための一連の機能が用意されています。ReSharper は、以下のフレームワークのプロパティ変更通知を実装できます。MVVM ライト (WPF、Silverlight、Windows Phone、ユニバーサルアプリ)、Caliburn.Micro (WPF、Silverlight、Windows Phone、ユニバーサ...

契約アノテーション

契約アノテーションでは、与えられた入力に対する期待される出力を定義することができます。言い換えれば、関数の参照型とブール型引数とその戻り値の間の依存関係を定義することができます。契約アノテーションのメカニズムにより、より簡単で安全な方法で消費できる API を作成できます。を使って関数を装飾することによって契約アノテーションを実装することができます。あなたのソースコード、JetBrains.Annotations 名前空間を参照するでそれをやりたいなら。外部アノテーションを使用して既存のバイナリ...