dotnet/roslyn

Renaming an identifier should undo implicit property naming

開放

#54,571 建立於 2021年7月2日

 (1 則留言) (0 個反應) (0 位負責人)C# (4,257 個分叉)batch import
Area-IDEConcept-Continuous ImprovementFeature - Renamehelp wanted

倉庫指標

星標
 (20,414 顆星)
PR 合併指標
 (平均合併 6天 17小時) (30 天內合併 256 個 PR)

描述

Version Used: Visual Studio Enterprise 2019 Version 16.9.4 C# Tools 3.9.0-6.21160.10+59eedc33d35754759994155ea2f4e1012a9951e3 Steps to Reproduce:

  1. Instantiate an anonymous type with an implicit property name (new { K })
  2. Rename the identifier referenced in the instantiation

Expected Behavior: The instantiation would use the explicit property name instead of implicit property naming, in order to preserve the definition of the anonymous type

Actual Behavior: Implicit property naming is still used, changing the definition of the anonymous type

Example:

int K = 0;
var x = new { K };
int y = x.K;

After renaming K -> Q

int Q = 0;
var x = new { Q };
int y = x.K;               // This is now a compile error

Expected behavior after renaming K -> Q

int Q = 0;
var x = new { K = Q };
int y = x.K;               // This works fine

In this example, the compiler catches the error. But this could result in silent bugs in use cases such as such as MVC where an anonymously typed value can be translated to a JSON response object.

貢獻者指南