为什么 Roslyn 中的 Renamer 不重命名 AnonymousObjectMemberDeclarator ?
Why Renamer in Roslyn doesn't rename AnonymousObjectMemberDeclarator ?
我有下面的代码,我用 roslyn 重命名了一些符号,例如我将学生 class 的 ID 属性 更改为 Id,但 ID 的一些引用没有改变。
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public List<Student> ListOfStudent { get; set; }
private void Form1_Load(object sender, EventArgs e)
{
var List1 = (from s in ListOfStudent select new { s.ID });// s.ID Changed to s.Id
var List2 = (from s in List1 where s.ID == 0 select s); // s.ID doesn't Changed to s.Id
}
}
我更改了 solution.but 中的 PropertyDeclarationSyntax 我不知道为什么上面代码中的 ID 属性 没有改变。
我如何重命名它?
'Ctrl + .' 并且 R# 重命名它。
无论如何,我认为这是一个错误,因为 List1 是 IEnumerable<anonymous type>
而不是 IEnumerable<Student>
,LIst1 的 ID 属性 与您学生的 ID 不同。
这是一个已知错误,我在自己的项目中也对此进行了详细说明:https://github.com/Vannevelj/VSDiagnostics/issues/379
长话短说:重命名传递给匿名对象并在之后使用的字段的组合是 Roslyn 目前无法处理的场景。
一个缩小的例子:
var x = 5
var y = new { x };
var z = y.x;
如果您现在重命名 x
,您将收到
var newName = 5
var y = new { newName };
var z = y.x;
这显然是不可编译的。
除了编写自己的重命名逻辑之外,您无能为力。我决定留下这个错误,因为它考虑到我的情况很少发生。
有一个公开的 PR 试图解决这个问题(部分?)但它已经有一段时间没有吸引力了:https://github.com/dotnet/roslyn/pull/5786
我有下面的代码,我用 roslyn 重命名了一些符号,例如我将学生 class 的 ID 属性 更改为 Id,但 ID 的一些引用没有改变。
public class Student
{
public int ID { get; set; }
public string Name { get; set; }
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public List<Student> ListOfStudent { get; set; }
private void Form1_Load(object sender, EventArgs e)
{
var List1 = (from s in ListOfStudent select new { s.ID });// s.ID Changed to s.Id
var List2 = (from s in List1 where s.ID == 0 select s); // s.ID doesn't Changed to s.Id
}
}
我更改了 solution.but 中的 PropertyDeclarationSyntax 我不知道为什么上面代码中的 ID 属性 没有改变。 我如何重命名它?
'Ctrl + .' 并且 R# 重命名它。
无论如何,我认为这是一个错误,因为 List1 是 IEnumerable<anonymous type>
而不是 IEnumerable<Student>
,LIst1 的 ID 属性 与您学生的 ID 不同。
这是一个已知错误,我在自己的项目中也对此进行了详细说明:https://github.com/Vannevelj/VSDiagnostics/issues/379
长话短说:重命名传递给匿名对象并在之后使用的字段的组合是 Roslyn 目前无法处理的场景。
一个缩小的例子:
var x = 5
var y = new { x };
var z = y.x;
如果您现在重命名 x
,您将收到
var newName = 5
var y = new { newName };
var z = y.x;
这显然是不可编译的。
除了编写自己的重命名逻辑之外,您无能为力。我决定留下这个错误,因为它考虑到我的情况很少发生。
有一个公开的 PR 试图解决这个问题(部分?)但它已经有一段时间没有吸引力了:https://github.com/dotnet/roslyn/pull/5786