diff --git a/src/Meziantou.Analyzer/Rules/SimplifyStringCreateWhenAllParametersAreCultureInvariantAnalyzer.cs b/src/Meziantou.Analyzer/Rules/SimplifyStringCreateWhenAllParametersAreCultureInvariantAnalyzer.cs index 15ee26ee..d8722abb 100644 --- a/src/Meziantou.Analyzer/Rules/SimplifyStringCreateWhenAllParametersAreCultureInvariantAnalyzer.cs +++ b/src/Meziantou.Analyzer/Rules/SimplifyStringCreateWhenAllParametersAreCultureInvariantAnalyzer.cs @@ -75,7 +75,8 @@ private static void AnalyzeInvocation(OperationAnalysisContext context, IMethodS if (interpolatedStringArgument is IInterpolatedStringHandlerCreationOperation handlerCreation) { var interpolatedStringContent = handlerCreation.Content; - if (!cultureSensitiveContext.IsCultureSensitiveOperation(interpolatedStringContent, CultureSensitiveOptions.None)) + // Use UnwrapNullableOfT to check the underlying type of nullable types + if (!cultureSensitiveContext.IsCultureSensitiveOperation(interpolatedStringContent, CultureSensitiveOptions.UnwrapNullableOfT)) { context.ReportDiagnostic(Rule, operation); } diff --git a/tests/Meziantou.Analyzer.Test/Rules/SimplifyStringCreateWhenAllParametersAreCultureInvariantAnalyzerTests.cs b/tests/Meziantou.Analyzer.Test/Rules/SimplifyStringCreateWhenAllParametersAreCultureInvariantAnalyzerTests.cs index 07720b52..4ec86815 100644 --- a/tests/Meziantou.Analyzer.Test/Rules/SimplifyStringCreateWhenAllParametersAreCultureInvariantAnalyzerTests.cs +++ b/tests/Meziantou.Analyzer.Test/Rules/SimplifyStringCreateWhenAllParametersAreCultureInvariantAnalyzerTests.cs @@ -291,6 +291,52 @@ await CreateProjectBuilder() .ValidateAsync(); } + [Fact] + public async Task StringCreateWithInvariantCulture_WithNullableInteger_NoDiagnostic() + { + const string SourceCode = """ +using System; +using System.Globalization; + +class TypeName +{ + public void Test() + { + int? n = 42; + var s = string.Create(CultureInfo.InvariantCulture, $"/v{n}"); + } +} +"""; + await CreateProjectBuilder() + .WithLanguageVersion(Microsoft.CodeAnalysis.CSharp.LanguageVersion.CSharp10) + .WithTargetFramework(TargetFramework.Net6_0) + .WithSourceCode(SourceCode) + .ValidateAsync(); + } + + [Fact] + public async Task StringCreateWithInvariantCulture_WithNullableDouble_NoDiagnostic() + { + const string SourceCode = """ +using System; +using System.Globalization; + +class TypeName +{ + public void Test() + { + double? value = 3.14; + var s = string.Create(CultureInfo.InvariantCulture, $"Value: {value}"); + } +} +"""; + await CreateProjectBuilder() + .WithLanguageVersion(Microsoft.CodeAnalysis.CSharp.LanguageVersion.CSharp10) + .WithTargetFramework(TargetFramework.Net6_0) + .WithSourceCode(SourceCode) + .ValidateAsync(); + } + [Fact] public async Task StringCreateWithInvariantCulture_EmptyString_ShouldReport() {