2016-04-14 7 views
3

Ich habe den untenstehenden Code und ich habe mit roslyn einige Symbole umbenannt, zum Beispiel habe ich ID-Eigenschaft der Student-Klasse in Id geändert, aber einige der ID-referenziert nicht geändert.Warum Renamer in Roslyn AnonymousObjectMemberDeclarator nicht umbenennen?

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 
    } 
} 

änderte ich den PropertyDeclarationSyntax in meinem solution.but Ich weiß nicht, warum ändert ID-Eigenschaft in obigem Code nicht. Wie kann ich es umbenennen?

Antwort

3

Dies ist ein bekannter Fehler, wie ich auch in meinem eigenen Projekt hier detailliert beschrieben haben: https://github.com/Vannevelj/VSDiagnostics/issues/379

Lange Rede kurzer Sinn: die Kombination eines Feld Umbenennung, die auf ein anonymes Objekt übergeben wird, und danach wird ein Szenario verwendet, das ist Derzeit nicht von Roslyn behandelt.

Ein verkleinertes Beispiel:

var x = 5 
var y = new { x }; 
var z = y.x; 

Wenn Sie jetzt x umbenennen, werden Sie

var newName = 5 
var y = new { newName }; 
var z = y.x; 

erhalten, die offensichtlich nicht übersetzbar ist.

Sie können nicht viel anderes tun, als Ihre eigene Umbenennungslogik zu schreiben. Ich habe mich entschieden, den Fehler zu lassen, da mein Szenario sehr selten eintreten wird.

Es gibt eine offene PR, die das (teilweise?) Zu behandeln versucht, aber es hat nicht Traktion in einer Zeit lang hat: https://github.com/dotnet/roslyn/pull/5786

3

'Strg +.' und auch R # umbenennen. Wie auch immer, ich denke, es ist ein Fehler, weil List1 IEnumerable<anonymous type> und nicht IEnumerable<Student> ist, die ID-Eigenschaft von LIst1 es ist nicht die gleiche ID Ihres Schülers.

+0

ich umbenennen will, dass es mit roslyn nicht in Visual Studio – mohsen

+1

@mohsen durch das Symbol untersuchen ? Wenn ja, ist es nicht zur Arbeit gegangen. Wie ich schon sagte, es ist ein anderes Symbol. Wie auch immer, Sie können es basierend auf einer anderen Logik tun, um den Eigenschaftstyp und -namen zu untersuchen. –