2012-11-11 31 views
8

Lưu ý, tôi không hoàn toàn chắc chắn câu hỏi này thuộc về trang web này nhưng tôi cố gắng xây dựng.

Tại sao mãIntPtr vào chuỗi hex trong chuỗi.Format

IntPtr ptr = new IntPtr(1234); 
Console.WriteLine(string.Format("{0:X8}", ptr)); 
Console.WriteLine(ptr.ToString("X8")); 
Console.WriteLine(string.Format("{0:X8}", ptr.ToInt32())); 

đầu ra

1234 
000004D2 
000004D2 

Tại sao không phải là hex áp dụng định dạng cho lập luận IntPtr trực tiếp, khi được yêu cầu như vậy trong định dạng? Có bất kỳ đối số đã biết nào chống lại việc thiết kế chức năng như vậy -?
Nếu không có đối số nào chống lại thiết kế như vậy thì tôi nên báo cáo vấn đề này cho Microsoft ở đâu?


Cũng lưu ý rằng trình gỡ lỗi hiển thị giá trị IntPtr trong hex nếu được yêu cầu.
Tôi thấy rằng đó là cách khá trực quan và tương đối thường xuyên để in ra các giá trị IntPtr. Tôi cũng đã tìm thấy mã được viết bởi những người khác sử dụng dòng đầu tiên và rõ ràng là mong đợi kết quả hex, nhưng thực sự kết quả là khác nhau. Nó cũng mất một thời gian cho tôi để thông báo vấn đề, mà phức tạp sự hiểu biết các thông điệp tường trình.

Trả lời

2

Đó là vì trong trường hợp đầu tiên, kể từ IntPtr không phải là một trong các loại tích hợp sẵn hoạt động với String.Format, ptr.ToString() được gọi để trả về một chuỗi. Vì định dạng chỉ được áp dụng sau khi chuyển đổi thành chuỗi, trình định dạng định dạng X8 không có hiệu lực.

6

Để String.Format method sử dụng chuỗi định dạng cho đối số, đối số phải triển khai IFormattable interface.

Khi IntPtr type không thực hiện IFormattable, phương pháp String.Format sẽ chỉ gọi phương thức parameterless ToString để biến giá trị IntPtr thành một chuỗi.

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