2016-05-10 5 views
2

Gibt es ein Tool, das Felder in Eigenschaften konvertiert?Gibt es Tools, die alle Felder in Eigenschaften in einer Gruppe von .cs-Dateien konvertieren?

Ich habe viele Felder in meinem Projekt und es dauert eine lange Zeit, alle Felder manuell in Eigenschaften umzuwandeln.

+0

Sind Sie 'public Property mit {get; einstellen; } Syntax? Das dauert nicht lange. – ManoDestra

+0

Warum erstellen Sie die Felder überhaupt, verwenden Sie einfach Auto-Eigenschaften statt, tun Sie 'öffentliche bool Foo {bekommen; einstellen; } ' –

+0

Gibt es einen bestimmten Grund, warum Sie das tun? Mein Projekt VSDiagnostics (https://github.com/VSDiagnostics/VSDiagnostics) hat einen Code-Fix, der nicht-statische/statische öffentliche/interne Felder in Eigenschaften ändert. Analyzer-Implementierung: https://github.com/VSDiagnostics/VSDiagnostics/blob/develop/VSDiagnostics/VSDiagnostics/VSDiagnostics/Diagnostics/General/NonEncapsulatedOrMutableField/NonEncapsulatedOrMutableFieldAnalyzer.cs –

Antwort

1

Sie können die Visual Studio-Code-Snippets verwenden, um Code für Sie zu generieren.

Geben Sie einfach Prop und drücken Sie TAB, es wird Skelett für Sie erstellen. Sie müssen nur den Namen und den Typ der Eigenschaft angeben. So einfach.

+0

Das erstellt eine neue Eigenschaft - es verwendet keine Informationen aus der vorhandene Felder. –

0

Erbaut in Sie haben T4 Text Templates. Ich verwende normalerweise nur XSLT oder eine Konsolen-App, wenn ich Code-Dateien erzeugen möchte. Sie können auch Tools wie für komplexere Refactoring-Funktionen verwenden, als dies im Lieferumfang der Fall ist. Eingebaut finden Sie Encapsulate Field Refactoring.

0

Sie können dies mit Roslyn API tun.Sie können eine kleine C# -Anwendung erstellen, fügen Sie Roslyn API, öffnen Sie Ihre WinForm und asp.net-Projekt mit Roslyn und tun etwas wie Sie wollen.

Zuerst Klasse erstellen, die Ihre Dateien erhalten und neue Datei zurückgeben.

public class FieldToPropertyConverter: CSharpSyntaxRewriter 
{ 
FieldToPropertyConverter(string YourSolutionFilePath) 
{ 
    OpenSolution(YourSolutionFilePath); 
} 
public void OpenSolution(string path) 
{ 
    // OPEN your solution here 
} 
public Solution s ; 
public void Convent() 
{ 
    foreach (var p in s.Projects) 
     foreach (var d in p.Documents) 
     { 
       var cus = Visit(d.GetSyntaxRootAsync().Result); 
       // save cus to solution 
     } 
     // save you set solution to your work space 
} 
public override SyntaxNode VisitFieldDeclarationSyntax(FieldDeclarationSyntax f) 
{ 
    PropertyDeclaractionSyntax p =SyntaxFactory.PropertyDeclaraction(f.Declaraction.Type, f.Declaraction.Variables.First().Identifier); 
    return p; 
} 
} 

Sie diese Klasse verwenden können, wie diese

FieldToPropertyConverter c = new FieldToPropertyConverter("solutionFilePath"); 
c.Convent(); 
c.Save();