dotnet/roslyn

VB disregards CultureInfo on DateTime evaluation

オープン

#42,906 opened on 2020/03/30

 (0 件のコメント) (0 件のリアクション) (0 人の担当者)C# (4,257 件のフォーク)batch import
Area-InteractiveBugInteractive-DebuggingLanguage-VBhelp wanted

Repository metrics

Stars
 (20,414 個のスター)
PR merge metrics
 (平均マージ 6d 17h) (30d で 256 merged PRs)

説明

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.

コントリビューターガイド