Cho đối tượng MethodDeclarationSyntax làm thế nào tôi có thể tìm ra kiểu khai báo của phương thức?Tìm kiểu khai báo của phương thức
Vấn đề thực tế của tôi là tôi cần tìm hiểu xem liệu phương pháp được tham chiếu có đang triển khai phương thức giao diện hay không.
Ví dụ, với mã dưới đây, nếu tôi có một MethodDeclarationSyntax cho phương pháp Vứt bỏ(), làm thế nào có thể kết luận nó là việc triển khai IDisposable.Dispose()?
using System;
abstract class InterfaceImplementation : IDisposable
{
public abstract void Dispose();
}
Tôi đã cố gắng nhận kiểu khai báo của phương thức (và kiểm tra loại) không thành công (Thuộc tính cha mẹ cung cấp cho tôi lớp InterfaceImplementation).
Tôi cũng đã cố gắng để lấy các biểu tượng ngữ nghĩa cho phương pháp:
var methodSymbol = (MethodSymbol) semanticModel.GetDeclaredSymbol(methodDeclaration);
nhưng không thể nhận ra bất cứ điều gì có thể giúp tôi.
Ý tưởng?
Tôi sẽ sử dụng toán tử '==' thay vì 'Equals()' ở đây, vì 'FindImplementationForInterfaceMember()' có thể trả về 'null'. Hoặc ít nhất là viết 'Equals()' theo cách khác. – svick
@svick: điểm tốt khi hoán đổi thứ tự Bằng. Việc sử dụng Equals của tôi không phải ngẫu nhiên, như một thói quen quan trọng mà chúng tôi đã phát triển trong nhóm Roslyn: sử dụng == sẽ hoạt động tốt miễn là bạn chỉ sử dụng các loại ngôn ngữ cụ thể. Nếu bạn có hai IMethodSymbols, bạn * phải * sử dụng Equals như == không bị quá tải trong trường hợp đó. –
@ Jason tôi sợ điều này sẽ không giúp tôi vì nó giả định tôi biết những phương pháp tôi cần phải kiểm tra (trong mã của bạn, bạn lấy một tham chiếu đến Dispose() phương pháp biểu tượng và so sánh với điều đó) mà không phải là trường hợp. Tất nhiên tôi có thể kiểm tra lớp cơ sở/giao diện đệ quy (cho đến khi tôi đạt được đối tượng) nhưng tôi sẽ mong đợi rằng lớp MethodSymbol có thể cung cấp cho tôi thông tin này trực tiếp. – Vagaus