Cách toán tử có điều kiện (? :) không hoạt động khi được sử dụng với hai loại kế thừa từ một loại cơ sở đơn lẻ?
Kiểu của biểu thức điều kiện phải là một trong hai kiểu của toán hạng thứ hai hoặc kiểu của toán hạng thứ ba, theo các đặc điểm kỹ thuật ngôn ngữ. Trình biên dịch không cố gắng tìm loại cơ sở chung hoặc loại khác mà cả hai toán hạng đều có thể được chuyển đổi thành. Việc sử dụng sử dụng của biểu thức không ảnh hưởng đến cách loại của nó được xác định - do đó việc gán biến không liên quan ở đây.
Đối với lý do tại sao ngôn ngữ được định nghĩa như thế này - nó giúp việc xác định, triển khai, thử nghiệm và dự đoán đơn giản hơn đáng kể. Điều này là khá phổ biến trong thiết kế ngôn ngữ - giữ ngôn ngữ đơn giản thường là một cược tốt hơn trong thời gian dài, ngay cả khi nó làm cho nó hơi khó xử hơn trong một số tình huống cụ thể.
Xem phần 7.14 của thông số C# 4 để biết thêm chi tiết.
Truyền toán hạng thứ hai hoặc thứ ba sang loại mà bạn thực sự là muốn biểu thức có điều kiện là cách khắc phục sự cố. Lưu ý rằng một tình huống này thường đi lên trong là các loại nullable:
// Invalid
int? a = SomeCondition ? null : 10;
// All valid
int? a = SomeCondition ? (int?) null : 10;
int? b = SomeCondition ? default(int?) : 10;
int? c = SomeCondition ? null : (int?) 10;
Nguồn
2012-06-09 19:49:53
có thể giúp bạn hiển thị tình trạng axact? –
Trong trường hợp này, nó chỉ là một bool. –
thử truyền sang loại cơ sở: (ví dụ: ActionResult foo = (someCondition)? (ActionResult) RedirectToAction ("Foo", "Bar"): (ActionResult) Chuyển hướng (someUrl); ) –