2013-02-26 53 views
5

Tôi chỉ có ngoại lệ sau, có vẻ như chỉ ra rằng Guid không phải là một đối tượng.Tại sao Guid KHÔNG phải là một đối tượng trong C#?

Biểu hiện của loại 'System.Guid' không thể được sử dụng để trả lại loại 'System.Object'

thế nào là Guid không phải là một đối tượng?

Và trình biên dịch hình dung ra điều này như thế nào? Phải có một cái gì đó mà sẽ cho phép tôi để phát hiện tại thời gian chạy khi một loại không phải là một đối tượng, nếu vậy điều này sẽ là gì?

==================== Chỉnh sửa với thông tin bổ sung ====================

Expression.Lambda<Func<object>>(SomeExpression) 

Trong trường hợp SomeExpression có thể là giá trị không đổi của một Hướng dẫn, cho tất cả những vấn đề đó.

+2

Điều này có vẻ liên quan: http://stackoverflow.com/questions/2200209/expression-of-type-system-int32-cannot-be-used-for-return-type-system-object –

+0

Có, nhưng Tôi không muốn bỏ không nhất thiết, làm thế nào tôi biết nếu một cái gì đó sẽ làm việc ra khỏi con dơi? Biểu thức hoạt động ok, cho đến khi tôi xử lý với loại nội dung/giá trị của nội dung. – Alwyn

+3

Câu hỏi của bạn thiếu mã mẫu (và tốt nhất là mã lỗi CSXXXX có liên kết đến MSDN, vì vậy bạn có thể nhận xét về những gì không rõ ràng). –

Trả lời

17
Expression.Lambda<Func<object>>(SomeExpression) 

Vấn đề ở đây là bạn đang sử dụng cây biểu thức không chính xác. Mặc dù hoạt động của hộp được ngầm định trong C#, nó vẫn tồn tại. Đó là không phải là ẩn trong cây biểu thức. Sau đây nên khắc phục sự cố:

Expression.Lambda<Func<object>>(
    Expression.Convert(SomeExpression, typeof(object)) 

Bạn cũng có thể kiểm tra xem có thêm khoản chuyển đổi rõ ràng bổ sung này hay không.

+0

Marc, chuyển đổi ngầm đã hoạt động ổn, cho đến khi tôi xử lý với Guid. Nó hoạt động tốt với từ điển, danh sách, lớp phức tạp tùy chỉnh của tôi - bạn đặt tên cho nó. Tôi không nghĩ Guid là ngoại lệ duy nhất, nhưng chắc chắn là một trong số đó. – Alwyn

+5

@Alwyn và mọi thứ bạn đề cập là * loại tham chiếu *. Như tôi đã nói: hoạt động hộp phải rõ ràng. 'Guid' là một loại * giá trị * (một' cấu trúc') –

+0

@MarcGravell Gotcha, điều đó giải thích rất nhiều thứ, vì vậy bạn cần đấm bốc cho các loại giá trị. Tất cả các loại tham chiếu đều nhận được thẻ miễn phí. – Alwyn

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