2012-03-21 9 views
9

Có vẻ như một, theo phương pháp bắt buộc quan điểm của tôi bị thiếu trong TValue; TValue.Equals (TValue).Delphi XE: TValue.Equals() ở đâu?

Vì vậy, whats một cách nhanh chóng và khá so sánh 2 TValues, tốt nhất là không sử dụng TValue.ToString(), cho phép các trận đấu sai giữa các biến thể, hồ sơ vv

+0

Tôi nghĩ rằng DeHL (hiện đã ngừng) có một số nội dung để thực hiện việc này. Không biết chi tiết cụ thể. http://code.google.com/p/delphilhlplib/ – awmross

Trả lời

13

Delphi-Mocks trình bày hai chức năng:

function CompareValue(const Left,Right : TValue): Integer; 
function SameValue(const Left, Right: TValue): Boolean; 

với sự trợ giúp đăng ký cuối cùng TValue bạn cũng có thể làm TValue.Equals(TValue);

được cấp phép theo các điều khoản Apache và dưới sự cho phép của Stefan Glienke.

Đây là nguồn gốc của Stefan: delphisorcery.

Nếu bạn cần phải mở rộng chức năng cho các biến thể, thêm:

function TValueHelper.IsVariant: Boolean; 
begin 
    Result := TypeInfo = System.TypeInfo(Variant); 
end; 

và chèn

if Left.IsVariant and Right.IsVariant then 
begin 
    Result := Left.AsVariant = Right.AsVariant; 
end else 

sau khi so sánh isString trong SameValue chức năng.

+0

Ưu đãi cho liên kết, nhưng có vẻ như nó vẫn chưa hoàn thành (ví dụ: xác định sự bình đẳng của các biến thể bị thiếu). Tôi đang tìm kiếm một phiên bản nhỏ hơn, so sánh ví dụ: bộ nhớ địa chỉ. – Marius

+1

@Marius Bạn chỉ cần thêm chính chức năng bị thiếu. –

+0

@DavidHeffernan Đúng, mặc dù điều đó sẽ khiến câu hỏi ban đầu của tôi lỗi thời: p – Marius