2010-05-28 38 views
6

Tôi có một kiểu enum định nghĩa: EnumType Bây giờ tưởng tượngSo sánh hai đối tượng có chứa các giá trị enum loại enum cùng

object A = EnumType.Value1; 
object B = EnumType.Value2; 

Tôi muốn thực hiện việc so sánh (A == B) cho tôi đúng kết quả độc lập với loại Enum được sử dụng. Trong so sánh, đối tượng sẽ luôn luôn chứa enums, và cả hai sẽ cùng loại.

Tôi làm cách nào để đạt được điều này?

Trả lời

4

There is a good article on MSDN on when to use == and when to use Equals.

Về cơ bản có 2 loại bình đẳng: bình đẳng tham khảo và bình đẳng về giá trị. Nếu 2 đối tượng có tham chiếu bình đẳng, do đó chúng cũng có giá trị bình đẳng (cả hai tham chiếu đều trỏ đến cùng một đối tượng, do đó tất nhiên giá trị của chúng giống nhau).

Ngược lại, (và trong trường hợp của bạn) không phải lúc nào cũng đúng. Nếu 2 đối tượng có giá trị bình đẳng thì chúng không nhất thiết phải có tính bình đẳng. Trong trường hợp của bạn == hoạt động như bình đẳng tham chiếu.

  • Thông thường bạn muốn là Equals, đây là phương thức ảo được xác định trong System.Object.

  • Điều bạn thường không muốn cho các loại tham chiếu là ==, thông thường nó so sánh xem hai tham chiếu có tham chiếu đến cùng một đối tượng hay không.

Trong trường hợp của bạn AB được đóng hộp thành 2 đối tượng khác nhau. A đề cập đến số đầu tiên và B là từ thứ hai. == đang thử nghiệm và thấy rằng cả hai đều là referring đối với những thứ khác nhau.

+0

Có thể so sánh Enum ném ngoại lệ không? nếu có, thì giải pháp của nó là gì? –

3

Chỉ cần sử dụng A.Equals(B), nó sẽ gọi loại bên trong Bằng.

Trong trường hợp của bạn, bạn không thể sử dụng == vì A và B được đóng hộp trong 2 đối tượng khác nhau.

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