dotnet/roslyn

VB disregards CultureInfo on DateTime evaluation

开放

#42,906 创建于 2020年3月30日

 (0 条评论) (0 个反应) (0 位负责人)C# (4,257 个派生)batch import
Area-InteractiveBugInteractive-DebuggingLanguage-VBhelp wanted

仓库指标

星标
 (20,414 个星标)
PR 合并指标
 (平均合并 6天 17小时) (30 天内合并 256 个 PR)

描述

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.

贡献者指南