chore(sonar): prefer TryGetValue over ContainsKey+indexer (CA1854)

Applied via `dotnet format analyzers --diagnostics CA1854 --severity info`.
Eliminates the duplicate hash lookup in the
`if (d.ContainsKey(k)) d[k]++ else d[k] = 1` pattern. The fixer rewrites
the conditional to `if (d.TryGetValue(k, out var value)) d[k] = ++value;`
which is semantically identical but does the lookup once.

4 files touched.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Thom Lamb
2026-05-26 15:46:19 -05:00
co-authored by Claude Opus 4.7
parent f5d539b906
commit 81254c12f9
4 changed files with 9 additions and 13 deletions
@@ -186,9 +186,9 @@ public class QueryCollectionAnalyzer
var table = query.FromClause?.Clause?.Trim(); var table = query.FromClause?.Clause?.Trim();
if (!string.IsNullOrWhiteSpace(table)) if (!string.IsNullOrWhiteSpace(table))
{ {
if (tableUsage.ContainsKey(table)) if (tableUsage.TryGetValue(table, out int value))
{ {
tableUsage[table]++; tableUsage[table] = ++value;
} }
else else
{ {
@@ -221,9 +221,9 @@ public class QueryCollectionAnalyzer
foreach (var col in columns) foreach (var col in columns)
{ {
var columnName = col.Trim(); var columnName = col.Trim();
if (columnUsage.ContainsKey(columnName)) if (columnUsage.TryGetValue(columnName, out int value))
{ {
columnUsage[columnName]++; columnUsage[columnName] = ++value;
} }
else else
{ {
@@ -113,9 +113,8 @@ public class StatementParser : SqlServerStatementParser
// PostgreSQL-specific: Append LIMIT/OFFSET to ORDER BY if present // PostgreSQL-specific: Append LIMIT/OFFSET to ORDER BY if present
var orderByClause = clauses.OrderByClause?.Clause ?? string.Empty; var orderByClause = clauses.OrderByClause?.Clause ?? string.Empty;
if (clausePositions.ContainsKey(KeywordLimit)) if (clausePositions.TryGetValue(KeywordLimit, out int limitStart))
{ {
var limitStart = clausePositions[KeywordLimit];
var limitEnd = clausePositions.Values var limitEnd = clausePositions.Values
.Where(v => v > limitStart) .Where(v => v > limitStart)
.Order() .Order()
@@ -127,9 +126,8 @@ public class StatementParser : SqlServerStatementParser
: $"{orderByClause} {limitClause}"; : $"{orderByClause} {limitClause}";
} }
if (clausePositions.ContainsKey(KeywordOffset)) if (clausePositions.TryGetValue(KeywordOffset, out int offsetStart))
{ {
var offsetStart = clausePositions[KeywordOffset];
var offsetEnd = clausePositions.Values var offsetEnd = clausePositions.Values
.Where(v => v > offsetStart) .Where(v => v > offsetStart)
.Order() .Order()
@@ -119,9 +119,9 @@ public class StatementParser : SqlServerStatementParser
protected override void PostProcessClauses(SqlClauses clauses, string sql, Dictionary<string, int> clausePositions) protected override void PostProcessClauses(SqlClauses clauses, string sql, Dictionary<string, int> clausePositions)
{ {
// Snowflake-specific: Append LIMIT to ORDER BY if present // Snowflake-specific: Append LIMIT to ORDER BY if present
if (clausePositions.ContainsKey(KeywordLimit)) if (clausePositions.TryGetValue(KeywordLimit, out int value))
{ {
var limitClause = sql.Substring(clausePositions[KeywordLimit]).Trim(); var limitClause = sql.Substring(value).Trim();
if (clauses.OrderByClause != null) if (clauses.OrderByClause != null)
{ {
clauses.OrderByClause.Clause = string.IsNullOrEmpty(clauses.OrderByClause.Clause) clauses.OrderByClause.Clause = string.IsNullOrEmpty(clauses.OrderByClause.Clause)
@@ -271,15 +271,13 @@ public static class FlatDataUtils
{ {
ArgumentNullException.ThrowIfNull(data); ArgumentNullException.ThrowIfNull(data);
if (!data.ContainsKey(key)) if (!data.TryGetValue(key, out object? rawValue))
{ {
throw new ArgumentException( throw new ArgumentException(
$"The specified key is not available. Requested key: [{key}] Available keys: [{string.Join(", ", data.Keys)}]", $"The specified key is not available. Requested key: [{key}] Available keys: [{string.Join(", ", data.Keys)}]",
nameof(key)); nameof(key));
} }
var rawValue = data[key];
return rawValue; return rawValue;
} }