bir decimal
bir string
için örneğin dönüştürürken, CultureInfo.InvariantCulture
kullanın ve bir IFormatProvider
olarak geçmektedir. Fakat bu aşırı yüklenme neden object
'da değil?Neden nesne IFormatProvider kabul eden bir aşırı yüklenme yok?
güzel uygulama olacaktır:
public virtual string ToString()
{
// yadayada, usual ToString
}
public virtual string ToString(IFormatProvider provider)
{
return ToString();
}
Bu, hiçbir zarar veya object
sınıfa yarar, ama ondan kaynaklanan nesneler yerine aşırı geçersiz kılabilir ve onu zaman aramak çok daha kolay olacaktır olurdu sen tipinden emin değilsin. Bir sınıfın tüm özelliklerini alma ve xml bunu yazıyor olacağını bir yöntem çıkıyordu zaman
Beni buna çalıştırmak yapılan sorun
oldu. Nesnenin türünü kontrol etmek istemediğimden, sadeceToString
'u aradım. Ancak bu bir ondalık olurdu, çıktı, iş parçacığının en uygun olmayan
CurrentCulture
dayanacaktır. Görebildiğim tek çözüm,
CurrentCulture
'un
InvariantCulture
'a değiştirilmesi ve daha sonra, daha önce olduğu gibi geri dönmesidir. Denemek yazmak zorunda gibi Ama bu sadece çirkin olurdu nihayet vb bloklar
Benim şu anki kodudur:
foreach (var property in typeof(Order).GetProperties(BindingFlags.Public | BindingFlags.Instance).
Where(c => ValidTypes.Contains(c.PropertyType)))
{
var value = property.GetValue(order, null);
if (value != null)
{
writer.WriteElementString(property.Name,
value.ToString());
}
}
Ama olmasını isterim:
foreach (var property in typeof(Order).GetProperties(BindingFlags.Public | BindingFlags.Instance).
Where(c => ValidTypes.Contains(c.PropertyType)))
{
var value = property.GetValue(order, null);
if (value != null)
{
writer.WriteElementString(property.Name,
value.ToString(CultureInfo.InvariantCulture));
}
}
Herhangi yarar object
'da bu aşırı yüklenme olmaması?
'IConvertible' aslında daha mantıklı
– dlev@ dlev: Ben katılmıyorum - OP özellikle biçimlendirmek için * sadece * istiyor. Tipler IFormattable'ı ancak IConvertible'ı kolayca uygulayabildiğine ve IFormattable'daki tek yöntemin OP'nin çağırmak istediği gibi olduğunu düşünürsek, IFormattable'ın daha mantıklı olduğunu düşünüyorum. –
@Jon OP'nin sorusuna dayanarak, 'ToString() '' IConvertible' sürümünü kullanmayla ilgili deneyimi var gibi görünüyor, bu yüzden bundan bahsettim. Yine de, senin puanın iyi. – dlev