我有以下代码,我已经用roslyn重命名了一些符号,例如我将Student类的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
}
}
我在我的解决方案中更改了PropertyDeclarationSyntax。但我不知道为什么上面代码中的ID属性不会改变。 我怎样才能重命名呢?
答案 0 :(得分:3)
&#39; Ctrl +。&#39;并且R#重命名它。
无论如何,我认为这是一个错误,因为List1是IEnumerable<anonymous type>
而不是IEnumerable<Student>
,LIst1的ID属性与您学生的ID不同。
答案 1 :(得分:3)
这是一个已知的错误,我在我自己的项目中也有详细说明: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