2012-06-18 21 views
6

Tôi có đoạn mã sau vào một trang dao cạo CSHTML:Tại sao lệnh chuyển đổi trên chuỗi bị lỗi khi giá trị đến từ ViewBag?

@{ 
    var sort = ViewBag.Sort.ToString(); 
    switch (sort) 
    { 
     case "None": Html.Action("SortNone"); break; 
     case "Name": Html.Action("SortName"); break; 
     case "Date": Html.Action("SortDate"); break; 
    } 
} 

Tuy nhiên, điều này không thành công có tin nhắn Compiler Error:

CS0151: A switch expression or case label must be a bool, char, string, integral, enum, or corresponding nullable type 

Nhưng loại là một chuỗi! Viết lại điều này như một loạt các câu lệnh if/else hoạt động, nhưng không phải là thanh lịch.

Trả lời

9

Thử truyền, trình biên dịch không biết kiểu trả về của ToString() vì nó là động.

var sort = (string)ViewBag.Sort.ToString(); 
+1

OK, điều đó làm cho cảm giác ít nhất về mọi thứ tôi từng biết ... nhưng nó hoạt động! Tôi muốn thảo luận về lý do tại sao ToString() không chỉ trả về một chuỗi, nhưng có lẽ tôi không cần biết ... –

+0

Bởi vì nó là động, phương pháp sẽ bị ràng buộc trong thời gian chạy, không có bất cứ điều gì ngăn chặn một thực hiện mới của ToString trả về một cái gì đó khác hơn là một chuỗi. Bạn có thể sử dụng ((đối tượng) ViewBag.Sort) .ToString() –

+0

Tất nhiên! Cảm ơn lời giải thích và trả lời nhanh. –

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