2016-04-14 4 views
3

私は下のコードを持っていますが、私はroslynでいくつかのシンボルの名前を変更しました。たとえば、StudentクラスのIDプロパティをIdに変更しましたが、参照されたIDの一部は変更されません。RoselynのRenamerがAnonymousObjectMemberDeclaratorの名前を変更しないのはなぜですか?

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

私は上記のコードでのIDプロパティが変更されない理由を私は知らない私のsolution.butでPropertyDeclarationSyntaxを変更しました。 名前を変更するにはどうすればよいですか?

答えて

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

3

'Ctrl +。' R#はその名前を変更します。 とにかくList1がIEnumerable<anonymous type>で、IEnumerable<Student>ではないので、私はバグだと思っています.LIst1のIDプロパティは学生のIDと同じではありません。

+0

私はないシンボルを調べることによって@mohsenのVisual Studio – mohsen

+1

でロスリンと名前を変更したいです?はいの場合は、動作していません。私はその別のシンボルを言ったように。とにかく、プロパティの種類と名前を調べるような別のロジックに基づいて行うことができます。 –

関連する問題