ReSharper 2020.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' }

詳しくは、価値とnull可能性の分析を参照してください。

NotNullAttribute

マークされた要素の値が決して nullでないことを示します。

サンプル

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

詳しくは、価値とnull可能性の分析を参照してください。

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()); } }

詳しくは、価値とnull可能性の分析を参照してください。

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()); } }

詳しくは、価値とnull可能性の分析を参照してください。

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 }

メンバー

  • #ctor(System.String) 注釈付きメソッドのどのパラメータを書式文字列として扱うかを指定する

詳しくは、カスタム文字列書式設定メソッドを参照してください。

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つに一致する必要があることを示します。例:ReSharperはSystem.ArgumentNullException(英語)のパラメータに注釈を付けます。

サンプル

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::=入力=>出力 | 出力<=入力

  • 入力:: =パラメータ名: 値[、入力] *

  • 出力:: = [ParameterName: 値] * {停止 | 停止 | 無効 | 何もしない | 値}

  • 値:: = true | false | null | notnull | カンベニュー

メソッドに単一の入力パラメーターがある場合、その名前は省略できます。
メソッドの出力に 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 } } }

BaseTypeRequiredAttribute

ターゲット属性に適用すると、特定のタイプまたはタイプを実装または継承するために、ターゲット属性でマークされたすべてのタイプの要件を指定します。

サンプル

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

UsedImplicitlyAttribute

マークされたシンボルが暗黙的に使用されることを示します(たとえば、リフレクションを介して、外部ライブラリで)。このシンボルは、使用状況チェックインスペクションによって無視されます。
ImplicitUseKindFlagsおよびImplicitUseTargetFlagsを使用して、この属性の適用方法を構成できます。

サンプル

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

MeansImplicitUseAttribute

属性、型パラメーター、およびSystem.Type(英語)から割り当て可能な型のパラメーターに適用できます。属性に適用すると、装飾された属性はUsedImplicitlyAttributeと同じように動作します。型パラメータまたはタイプSystem.Type(英語)のパラメータに適用される場合、対応するタイプが暗黙的に使用されることを示します。

PublicAPIAttribute

この属性は、公開されているAPIをマークすることを目的としており、削除してはならず、使用済みとして扱われます。

InstantHandleAttribute

呼び出されたメソッドがスタックにあるときにパラメーターが完全に処理されるかどうかをコード分析エンジンに通知します。パラメータがデリゲートの場合、メソッドの実行中にデリゲートが実行されることを示します。パラメータが列挙可能な場合、メソッドの実行中に列挙されることを示します。

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...")]
.

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$ } }

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

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のターゲットパラメータを指定します。

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

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 }

RazorSectionAttribute

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

CollectionAccessAttribute

メソッド、コンストラクターの呼び出し、またはコレクションの型に対するプロパティアクセスが、コレクションの内容に与える影響を示します。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、.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

Indicates that the marked parameter, field, or property is a regular expression pattern.

詳しくは、正規表現のアシスタンスを参照してください。

NoReorderAttribute

メンバーの並べ替え機能が、マークされたクラスのメンバーを投げ捨てるのを防ぎます。

属性はメンバーの並べ替えパターンに記述する必要があります。

詳細については、ファイルとタイプのレイアウトパターンを使用してメンバーを再配置するを参照してください。

XamlItemsControlAttribute

XAML属性。内部項目 DataContext タイプの解決を可能にするために、ItemsSource プロパティを持ち、ItemsControl由来の型として扱われる型を示します。

XamlItemBindingOfItemsControlAttribute

XAML属性。 ItemsControl由来の型の項目をバインドするために使用される、一部の BindingBase由来の型のプロパティを示します。この注釈は、そのようなプロパティのXAMLバインディングに対して DataContext 型解決を有効にします。

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

XamlItemStyleOfItemsControlAttribute

XAML属性。 ItemsControl -derivedタイプのアイテムのスタイルを設定するために使用される、いくつかの Style -derivedタイプのプロパティを示します。この注釈は、そのようなプロパティのXAMLバインディングの DataContext タイプ解決を有効にします。

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

ヘルパーの種類

ImplicitUseKindFlags

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

メンバー

  • Access

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

  • Assign

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

  • InstantiatedWithFixedConstructorSignature

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

  • InstantiatedNoFixedConstructorSignature

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

ImplicitUseTargetFlags

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

メンバー

  • Members

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

  • WithInheritors

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

  • WithMembers

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

CollectionAccessType

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

メンバー

  • None

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

  • Read

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

  • ModifyExistingContent

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

  • UpdatedContent

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

AssertionConditionType

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

メンバー

  • IS_TRUE

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

  • IS_FALSE

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

  • IS_NULL

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

  • IS_NOT_NULL

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

最終更新日: 2020年8月04日

関連ページ:

ソースコードの注釈

ReSharperのコード注釈の恩恵を受ける最も簡単な方法は、ソースコードのシンボルに注釈属性を追加し、ReSharperがソリューションをより正確かつ洞察力で分析できるようにすることです。デフォルトでは、すべての注釈属性クラスは属性でマークされているため、コンパイラはコード内の属性の使用を無視しま...

価値とnull可能性の分析

ReSharperは、可能な「null」逆参照、および重複ブール比較およびnull・チェックを見つけるのに役立つ値分析を実行します。値を分析するさまざまな方法:ReSharperは、2つの一般的な方法で値を分析します。言語構成体の動作を理解します。次の例では、パラメータが明示的にnull可能性をチェ...

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

ReSharperは、コード内の文字列リテラルに一連の機能を提供します。ReSharperのコード分析と多数のヘルパーの恩恵を受ける:平紐:コードにプレーンな文字列を使って作業しているときにReSharperがどのように役立つかは次のとおりです。デフォルトでは、ReSharperは、すべての非逐語的...

INotifyPropertyChangedサポート

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

契約の注釈

契約注釈では、与えられた入力に対する期待される出力を定義することができます。言い換えれば、関数の参照型とブール型引数とその戻り値の間の依存関係を定義することができます。契約注釈のメカニズムにより、より簡単で安全な方法で消費できるAPIを作成できます。契約注釈の代わりに、より単純な代替手段を使用したい...

ローカライゼーションインスペクションとクイックフィックス

ReSharper provides a number of code inspections that help you localize your application by detecting localizable strings, problems with resources and