dotnet/roslyn

VB disregards CultureInfo on DateTime evaluation

Aperta

#42.906 aperta il 30 mar 2020

 (0 commenti) (0 reazioni) (0 assegnatari)C# (4257 fork)batch import
Area-InteractiveBugInteractive-DebuggingLanguage-VBhelp wanted

Metriche repository

Star
 (20.414 stelle)
Metriche merge PR
 (Merge medio 6g 17h) (256 PR mergiate in 30 g)

Descrizione

Steps to Reproduce:

Sub Main(args As String())
    Thread.CurrentThread.CurrentCulture = New CultureInfo("pt-BR")

    Dim dateTime = System.DateTime.Now
    Console.WriteLine(dateTime) // breakpoint here
End Sub
  1. Start debugging and stop at breakpoint;
  2. Open Watch Window and evaluate the following expressions:
dateTime
dateTime.ToString()

Expected Behavior: Both expressions have the same formatting.

Actual Behavior: DateTime object evaluation ignores formatting and uses "en-US" by default.

Remarks

  • Not a regression;
  • The issue only reproduces on VB since it follows the codepath for DateTime as a primitive value;
  • Regarding this code path on Formatter.FormatPrimitive(...):
if (value.Type.GetLmrType().IsDateTime())
{
    var dateDataValue = value.GetPropertyValue("Ticks", inspectionContext);
    obj = new DateTime((long)dateDataValue.HostObjectValue);
}

It is no longer necessary - the debugger now returns the DateTime object at value.HostObjectValue.

Guida contributor