| 財産 | 価値 |
|---|---|
| ルール ID | IDE0120 |
| タイトル | LINQ 式を簡略化する |
| カテゴリ | スタイル |
| サブカテゴリー | 不要なコード規則(式レベルの好み) |
| 対象言語 | C# と Visual Basic |
概要
この規則は、過度に複雑な LINQ 式、特に Enumerable.Where<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>) 呼び出す式にフラグを設定し、その後に次のいずれかのメソッドを指定します。
- Any<TSource>(IEnumerable<TSource>)
- Count<TSource>(IEnumerable<TSource>)
- First<TSource>(IEnumerable<TSource>)
- FirstOrDefault<TSource>(IEnumerable<TSource>)
- Last<TSource>(IEnumerable<TSource>)
- LastOrDefault<TSource>(IEnumerable<TSource>)
- Single<TSource>(IEnumerable<TSource>)
- SingleOrDefault<TSource>(IEnumerable<TSource>)
このような式は、Where<TSource>(IEnumerable<TSource>, Func<TSource,Int32,Boolean>) の呼び出しを削除し、代わりに Any()、Count()、First()、FirstOrDefault()、Last()、LastOrDefault()、Single、または要素をフィルター処理する述語関数を受け入れる SingleOrDefault() のオーバーロードを呼び出すことによって簡略化できます。
オプション
この規則には、関連付けられたコード スタイルのオプションはありません。
例
// Code with violations.
IEnumerable<string> words = new List<string> { "hello", "world", "!" };
var result = words.Where(x => x.Equals("hello")).Any();
// Fixed code.
IEnumerable<string> words = new List<string> { "hello", "world", "!" };
var result = words.Any(x => x.Equals("hello"));
警告を抑制する
1 つの違反のみを抑制する場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、ルールを再度有効にします。
#pragma warning disable IDE0120
// The code that's violating the rule is on this line.
#pragma warning restore IDE0120
ファイル、フォルダー、またはプロジェクトのルールを無効にするには、その重大度を 構成ファイルに none に設定します。
[*.{cs,vb}]
dotnet_diagnostic.IDE0120.severity = none
すべてのコード スタイルルールを無効にするには、カテゴリ Style の重大度を、構成ファイルに none するように設定します。
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Style.severity = none
詳細については、「コード分析の警告を抑制する方法」を参照してください。
関連項目
.NET