.'/> .'/> .'/> C # 's Listesi ile ilgili soru <>. | tutuappapks.com

Soru C # 's Listesi ile ilgili soru <>.


Neden c # List<>'ler ToString yöntem, içeriğini basan hassas bir dize temsili sağlar mı? Sınıf adını aldım (varsayılan değer olduğunu varsayalım object.ToString uygulama) yazdırmaya çalıştığımda List<> nesne. Neden böyle?


32
2018-02-19 11:24


Menşei


Genel veya jenerik olmayan? - BoltClock♦
@BoltClock: Düzenlenen soruya bakın. - missingfaktor
Sen istemezsin OutOfMemoryException büyük bir liste için. - Ani
@missingfaktor: bir yöntem için fazla istihbaratın% 99,9'unu kullanmayacağınız için kullandığınız zaman başka bir şekilde dize ihtiyacınız var ... - digEmAll
@missingfaktor ellipsis kötüdür çünkü genellikle fikir, ToString'in anlamlı bir uygulama varsa RoundTrip'e yapabilmesi içindir. Elips ile kırılacak. Bırakın, elipsin ne zaman yer alması gerektiğini belirtmenin bir yolu olmadan işe yaramayacağını söyleyin. Üstelik daha da karmaşıktır çünkü bir liste, içeriğinde sadece içerik öğelerini ToStringing olduğunda sonsuz bir yineleme ile sonuçlanacak bir başvuru içerebilir. - Foxfire


Cevaplar:


Basit cevap şudur: bu sadece böyle, korkarım.

aynı şekilde List<T> geçersiz kılmıyor GetHashCode veya Equals. Basit çağırmaktan başka bir şekilde biçimlendirmenin çok az bir yolu olacağını unutmayın. ToString kendisi, belki de değerleri virgülle ayıran.

İsterseniz uygun formatlamayı gerçekleştirmek için kendi uzantı yönteminizi yazabilir veya daha yeni aşırı yüklemeleri kullanabilirsiniz. string.Join Bu oldukça basit:

string text = string.Join(",", list);

49
2018-02-19 11:28



Bu dize olmalı metin = string.Join (',', list.ToArray ()); ? - Ryan
@Ryan: OP'in .NET 3.5 veya .NET 4 kullanıp kullanmadığına bağlıdır. - .NET 4'te daha fazla aşırı yüklenme vardır. string.Join. - Jon Skeet
Sadece <T> (T1, T2, ...) Listesi var. ToString () dönüşü <string> (T1.ToString (), T2.ToString (), ...) - TheMathemagician
Değiştirmek zorundaydım string.Join(',', list); için string.Join(",", list); (karakter dizisini değiştirdi) - Nom1fan
@ Nom1fan: Teşekkürler, sabit. - Jon Skeet


Sebebi, gerçekte ne yapması gerektiği belli değil.

Belki de hiç elemenatta ToString yapar ve onları comas'la ayırır mı? Ama birisi noktalı virgül isterse? Ya da tire? Ya da birisi bütün ipleri kıvırcık veya normal bracletlere mi kapamak ister? Ya da somon tek bir öğenin metinsel gösterimini elde etmek için farklı bir işlev kullanmak ister?

Unutulmaması gereken birkaç şey: ToString yalnızca arşivleme amaçlı hata ayıklamalarında kullanılmalıdır. Verilerinizi dizeye vermek istiyorsanız, sınıfınızda bu davranışı geçersiz kılın veya bunun için bir yardımcı program sınıfı hazırlayın.

Ayrıca Listenin, metinsel sunumunu sağlamak için değil, öğeleri depolaması amaçlanmıştır.


5
2018-02-19 11:47





Çünkü muhtemelen uygulanması o kadar kolay değil.

bir List<> bir sürü şey içerebilir. Örneğin başka List<> içeren bir Dictionary<> karmaşık nesneleri içeren ...


2
2018-02-19 11:30



@gsharp: Java'nın List sağlar. Bunun hakkında söyleyecek neyiniz var? - missingfaktor
@missing: Bu C # Java ile aynı dil değildir. Bu sorunun ne anlama geldiğinden emin değil. - Cody Gray♦
Muhtemelen java adamların daha akıllı olduğunu söylüyor? ;-) - gsharp
@Cody: Bu, Java formunda seçkin bir counterexample bulunduğundan @gsharp'ın nedenlerinin gerçekten nedenler olamayacağını ima eden retorik bir soruydu. - missingfaktor
C # millet kesinlikle zarif olmalı ve Java adamlar bu konuda zafer iddia edelim. Yapılması gereken en önemli şey ... Java, birçok yönden çok korkunç bir şekilde berbat! :) - Daniel Earwicker