2012-06-28 34 views
6

Đối với một số lý do tuyên bố này đang làm việc tốt:Sử dụng một loại bí danh trong một tuyên bố LINQ đang tạo ra một lỗi

vms.Where(vm => vm.MessageType == ValidationMessage.EnumValidationMessageType.Warning) 

Nhưng nếu ở phía trên cùng của lớp, tôi xác định một bí danh (để tiết kiệm không gian):

using MsgType = ValidationMessage.EnumValidationMessageType; 

Sau đó, các vòng dây mã:

vms.Where(vm => vm.MessageType == MsgType.Warning) 

Cung cấp cho tôi một lỗi:

enter image description here "Ủy quyền 'System.Func<ValidationMessage, int, bool>' không dùng 1 đối số". Điều kỳ quặc về điều đó là không phải là Đại biểu mà tôi đang sử dụng. Tôi đang sử dụng quá tải 'System.Func<ValidationMessage, bool>' của .Where<>() - giống như khi tôi không sử dụng bí danh.

Lưu ý rằng ở mọi nơi khác bí danh đang được sử dụng hoạt động tốt, nó chỉ nằm trong các đại biểu LINQ mà nó phá vỡ. Tại sao chuyện này đang xảy ra?

+0

Ahahaha. Nếu tôi cố gắng làm việc xung quanh nó bằng cách cho nó một arg cho đối số thứ hai (index): 'vms.Where ((vm, i) => vm.MessageType == MsgType.Warning)', nó sau đó lật trở lại và nói " Delegate 'System.Func ' không lấy 2 đối số "! Thật là một câu chuyện hài hước. – Alain

+1

Bạn có gặp lỗi tương tự nếu bạn cố biên dịch không? Hoặc chỉ phát hiện lỗi VS cho thấy chúng? – nemesv

+0

Điểm thực sự tốt. Mã của tôi không phải là ở một trạng thái biên dịch vì vậy tôi đã không thử nó, nhưng tôi nhận xét ra mã chưa hoàn thành và cố gắng chạy và lỗi hợp lý hơn nhiều: nó không thể tìm thấy không gian tên cho khai báo bí danh kiểu của tôi. Giải pháp là đánh vần đầy đủ đường dẫn tới kiểu: 'using MsgType = WPF.Utilities.ObjectModel.ValidationMessage.EnumValidationMessageType;' Sau đó mọi thứ tự sửa. – Alain

Trả lời

2

Khi cố gắng chạy chương trình của mình, tất cả các lỗi đó đều bị xóa và một lỗi duy nhất xuất hiện phàn nàn về khai báo bí danh loại của tôi.

Vấn đề là loại ValidationMessage.EnumValidationMessageType tồn tại trong một không gian tên, vốn đã được tuyên bố tiếp tục lên:

using WPF.Utilities.ObjectModel; 
using MsgType = ValidationMessage.EnumValidationMessageType; 

Tất nhiên, C# không thể tìm ra nơi mà các loại xuất phát từ căn cứ vào vùi namespace trước, Tôi phải đánh vần nó hoàn toàn:

using WPF.Utilities.ObjectModel; 
using MsgType = WPF.Utilities.ObjectModel.ValidationMessage.EnumValidationMessageType; 

Khi tôi đã làm điều đó, vấn đề khác sẽ biến mất.

Tôi đoán mình đã bị cuốn vào những lỗi kỳ lạ trong câu lệnh linq, kết hợp với thực tế là VS không hiển thị bất kỳ lỗi nào khi tôi sử dụng bí danh trong các toán tử bậc ba ở trên, Tôi không thấy lỗi rõ ràng ở đó.

Cảm ơn gợi ý gợi ý - Tôi nên biết rõ hơn là tin cậy trình biên dịch thiết kế thời gian.

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