Giả sử tôi có một tập tin nguồn mà trông như thế này:Tìm Định danh trong Semantic Mẫu
public class FieldReference
{
int field;
public FieldReference()
{
field = 1;
}
}
Tôi đang sử dụng một SyntaxRewriter đến thăm tất cả các định danh trong tập tin này. Trong phương thức VisitIdentifierName, tôi muốn tra cứu từ định danh trong mô hình ngữ nghĩa, để khám phá nếu một định danh dùng để chỉ một thành viên của lớp hiện tại.
Đây là những gì tôi có cho đến nay:
public override SyntaxNode VisitIdentifierName(IdentifierNameSyntax node)
{
SemanticModel model = this.compilation.GetSemanticModel(this.src);
// ?? look up identifier in compilation here ??
return base.VisitIdentifierName(node);
}
Tuy nhiên tôi không thể tìm thấy đi để tìm kiếm các định danh trong mô hình Symantic - không có tình trạng quá tải của các phương pháp SemanticModel.GetDeclaredSymbol chấp nhận một IdentifierNameSyntax .
Bất kỳ ý tưởng nào về cách tôi nên thực hiện việc này?
Cảm ơn Kevin, không chắc tôi đã bỏ qua điều đó như thế nào. Tất cả chỉ là rất mới với tôi tôi đoán! – Grokys
hmm, điều này có vẻ bị hỏng trong phiên bản xem trước hiện tại của Roslyn. Xem dự án mẫu => ConvertToAutoPropertyCS => Bên trong PropertyRewriter => VisitFieldDeclaration (trường FieldDeclarationSyntax) Không có cách nào để lấy biểu tượng cho tham số trường. – mynkow
Bởi vì khai báo trường có thể khai báo nhiều hơn một biểu tượng, bạn cần sử dụng biến VariableDeclaratorSyntax. –