2012-11-11 21 views
8

Not: Bu sorunun bu siteye ait olduğundan emin değilim ama yapıcı olmaya çalışıyorum.

neden kodundize içinde onaltılık dize içine gir. 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())); 

çıkış

1234 
000004D2 
000004D2 
biçimlendirilmesinde böylece istendiğinde altıgen, doğrudan IntPtr argüman uygulanan formatta değildir Neden

? İşlevsellik tasarlanmasına karşı bilinen herhangi bir argüman var mı?
Böyle bir tasarıma karşı argüman bulunmuyorsa, bu sorunu hangi kanaldan Microsoft'a bildirmeliyim?


Ayrıca, hata ayıklayıcının istenirse onaltılık olarak IntPtr değerini görüntülediğini unutmayın.
IntPtr değerlerini yazdırmanın oldukça sezgisel ve göreceli olarak sık sık kullanılacağını buluyorum. Aynı zamanda, ilk satırı kullanan ve onaltılık sonuca ulaşan diğer kişilerin yazdığı kodları da buldum, ama aslında sonuç farklıydı. Ayrıca, günlük mesajlarının anlaşılmasının karmaşık olduğu konuyu fark etmem biraz zaman aldı.

cevap

2

Bunun nedeni, ilk durumda, IntPtr'dan beri, String.Format ile çalışan tümleşik türlerden biri olmadığından, bir dize döndürmek için ptr.ToString() çağrılır. Biçimlendirme yalnızca bir dizgeye dönüştürüldükten sonra uygulandığından, X8 biçim belirtecinin bir etkisi yoktur.

6

String.Format method argümanı için bir biçim dizgisi kullanmak için argüman IFormattable interface'u uygulamak zorundadır. IFormattable uygulamıyor IntPtr type olarak

, String.Format yöntem sadece bir dizeye IntPtr değerini açmak için parametresiz ToString yöntemini çağırır.