From 266ad843badb13179a48d8ee3396e2152af0c8eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=B0lker=20amca?= Date: Sun, 26 Jul 2026 04:52:48 +0300 Subject: [PATCH] Handle NaN and Infinity in CSharpHelper.Literal(float) - Return float.NaN, float.PositiveInfinity, and float.NegativeInfinity instead of invalid literals such as "NaNf", "Infinityf", and "-Infinityf" that do not compile - Mirrors the existing NaN/Infinity handling for double - Add float NaN/Infinity cases to CSharpHelperTest.Literal_works Co-Authored-By: Claude Opus 4.8 --- .../Design/Internal/CSharpHelper.cs | 19 ++++++++++++++++++- .../Design/Internal/CSharpHelperTest.cs | 6 ++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/EFCore.Design/Design/Internal/CSharpHelper.cs b/src/EFCore.Design/Design/Internal/CSharpHelper.cs index ff217f57fd3..c7437348393 100644 --- a/src/EFCore.Design/Design/Internal/CSharpHelper.cs +++ b/src/EFCore.Design/Design/Internal/CSharpHelper.cs @@ -505,7 +505,24 @@ private static string EnsureDecimalPlaces(double number) /// doing so can result in application failures when updating to a new Entity Framework Core release. /// public virtual string Literal(float value) - => value.ToString(CultureInfo.InvariantCulture) + "f"; + { + if (float.IsNaN(value)) + { + return $"float.{nameof(float.NaN)}"; + } + + if (float.IsNegativeInfinity(value)) + { + return $"float.{nameof(float.NegativeInfinity)}"; + } + + if (float.IsPositiveInfinity(value)) + { + return $"float.{nameof(float.PositiveInfinity)}"; + } + + return value.ToString(CultureInfo.InvariantCulture) + "f"; + } /// /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to diff --git a/test/EFCore.Design.Tests/Design/Internal/CSharpHelperTest.cs b/test/EFCore.Design.Tests/Design/Internal/CSharpHelperTest.cs index 4180edee8d5..2bd7be3f0b9 100644 --- a/test/EFCore.Design.Tests/Design/Internal/CSharpHelperTest.cs +++ b/test/EFCore.Design.Tests/Design/Internal/CSharpHelperTest.cs @@ -50,6 +50,12 @@ public class CSharpHelperTest "-3.402823E+38f"), InlineData( 3.402823E+38f, // Single MaxValue "3.402823E+38f"), InlineData( + float.NegativeInfinity, + "float.NegativeInfinity"), InlineData( + float.PositiveInfinity, + "float.PositiveInfinity"), InlineData( + float.NaN, + "float.NaN"), InlineData( 42, "42"), InlineData( 42L,