2013-03-22 36 views
17

Khi gỡ lỗi, tôi đã mong đợi hai lớp khác nhau sử dụng cùng một thể hiện của một đối tượng. Tất cả các thuộc tính đều giống nhau cho hai đối tượng này, nhưng chúng là hai trường hợp khác nhau. Có cách nào để nói rằng trong trình sửa lỗi VS?Khi gỡ lỗi, có cách nào để biết một đối tượng có phải là một cá thể khác không?

Để khẳng định chắc chắn, tôi đã có thể để thêm một trường vào trong lớp:

private string someId = Guid.NewGuid().ToString(); 

Sau đó, khi gỡ lỗi, tôi ít nhất có thể nhìn vào lĩnh vực đó cho mỗi hai trường hợp. Có cách nào tốt hơn không liên quan đến việc tạo trường ID giả này không?

+3

Object.ReferenceEquals (obj1, obj2) –

+0

@PeterRitchie Vậy làm thế nào để bạn thực hiện việc này trong trình gỡ lỗi? Các đối tượng cần được kiểm tra, nằm trong hai lớp khác nhau. –

+1

Shift + F9, nhập "Object.ReferenceEquals (obj1, obj2)" và nhấn Reevaluate hoặc Add Watch. Hoặc chỉ cần gõ "Object.ReferenceEquals (obj1, obj2)" trong cột Name trong cửa sổ Watch. –

Trả lời

34

Khi gỡ lỗi, trong cửa sổ Người dân địa phương, nhấp chuột phải vào cá thể và chọn "Đặt ID đối tượng".

Điều này sẽ thêm số duy nhất cho trường hợp này được hiển thị bất cứ khi nào bạn nhìn thấy trường hợp trong trình gỡ lỗi (trong mẹo công cụ cũng như trong cửa sổ xem).

enter image description here

enter image description here

+0

Cảm ơn, nhưng tôi không thấy "Tạo ID đối tượng" khi tôi nhấp chuột phải vào biến khi gỡ lỗi. –

+0

OK! Bạn phải làm điều đó trong cửa sổ Người dân địa phương của bạn: http://blogs.msdn.com/b/zainnab/archive/2010/03/04/make-objectid-vstipdebug0015.aspx. Mẹo tuyệt vời! Cảm ơn! –

+0

Một TRIỆU CẢM ƠN! –

4

Object.Equals Method (Object, Object)

Edit: Để kiểm tra bình đẳng tham khảo sử dụng ReferenceEquals

Chỉnh sửa 2: Trong khi Debugging, Đi vào menu debug, cửa sổ -> cửa sổ ngay lập tức (IntelliSense nên làm việc ở đây) và ?Object.ReferenceEquals(obj1, obj2)

+1

Điều đó không làm điều đó, vì nó ảo. Nó có thể bị ghi đè bởi một lớp dẫn xuất. –

+3

Sử dụng tham chiếuEquals, chứ không phải bằng Equals. –

+0

Bất cứ ai có thể xác nhận nếu (đối tượng) p1 == (đối tượng) p2; sẽ đạt được điều tương tự, nhưng nhanh hơn một chút? Tôi không nhớ 100%. –

1

Ngoài các câu trả lời trên, bạn cũng có thể so sánh con trỏ. Nếu bạn có hai đối tượng obj1obj2, bạn có thể kiểm tra (ví dụ: trong Cửa sổ xem) địa chỉ của chúng với: &obj1&obj2. Lưu ý rằng các đối tượng có thể được di chuyển xung quanh bởi thời gian chạy .NET. Vì vậy, hai kiểm tra địa chỉ của cùng một đối tượng được tách biệt với một số thực thi mã ở giữa có thể dẫn đến các địa chỉ khác nhau.

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