5

tôi đã viết đoạn mã này:Trình phản xạ .NET không thể phản ánh chính xác toán tử kết hợp không?

private Queue<int> EnsureQueue() 
{ 
    return _queue ?? (_queue = new Queue<int>(10)); 
} 

và phản xạ mang lại cho tôi:

private Queue<int> EnsureQueue() 
{ 
    if (this._queue == null) 
    { 
    } 
    return (this._queue = new Queue<int>(10)); 
} 

Rõ ràng, đây không phải là những gì mã gốc nói. Dòng (this._queue = new Queue<int>(10)); sẽ luôn trả lại new Queue<int>(10) thay vì _queue khi không phải là null.

Đây có phải là lỗi trong số .NET Reflector hoặc tôi thiếu gì đó không? Chương trình này dường như cư xử một cách chính xác ...

EDIT -> Xem câu trả lời của tôi

+0

?? nhà điều hành là cú pháp đường, bạn đang thấy những gì trình biên dịch dịch nó vào. –

+0

@RonBeyer Nhưng đầu ra là không chính xác, phải không? – HerpDerpington

+3

Bạn có thể đăng thô IL không? Nó có thể sẽ rõ ràng hơn rất nhiều nếu bạn nhìn thấy những gì phản xạ đã cố gắng dịch từ. Thông thường tôi thấy rằng JetBrains DotPeek là chính xác hơn một chút so với Redgate, và tôi phản đối sử dụng Redgate sau khi họ "hứa" để giữ cho Reflector miễn phí, sau đó bắt đầu tính phí thái quá cho nó. DotPeek là miễn phí. –

Trả lời

3

Đây là những gì bản sao của tôi Reflector làm của phương pháp này:

private Queue<int> EnsureQueue() 
{ 
    return (this._queue ?? (this._queue = new Queue<int>(10))); 
} 

Trông khá darn tốt để tôi. Phiên bản 8.5.0.179, hãy chắc chắn cập nhật phiên bản của bạn.

+0

Tôi thực sự có cùng phiên bản: 8.5.0.179 (Dùng thử '??? !!!' (Tôi hy vọng đây không phải là nguồn gốc của vấn đề)) – HerpDerpington

+0

Điều đó rất khó xảy ra. Có lẽ bạn nên đăng một đoạn trích tốt hơn, tôi phải đoán tại biến _queue. –

+0

Có tùy chọn nào cho Trình phản xạ, như phiên bản C#, phiên bản trình biên dịch, cách dịch ngược một số cấu trúc nhất định không? –

Các vấn đề liên quan