2011-02-03 15 views
5

BuXzx1 Liste <short> için C# Döküm Listesi

List<ushort> uList = new List<ushort>() { 1, 2, 3 }; 
List<short> sList = uList.Cast<short>().ToList(); 

yapmak istiyorum ama InvalidCastException alıyorum "Belirtilen döküm geçerli değil."

Yukarıdaki koleksiyonu nasıl hızlı ve verimli bir şekilde yapabilirim?

Teşekkürler.

+1

[Puzzling enumerable.Cast ınvalidcastexception] olası yinelenen (http://stackoverflow.com/questions/445471/puzzling-enumerable-cast-invalidcastexception) – Ani

+1

@Ani: Bir çoğaltmayı düşünmüyordum çünkü biliyorum 'int' 'uzun' (farklı boyutlardadır) yapamazsınız, ama bizden ushort'dan 'kısa' olmak için bir döküm olmasını beklerim. çünkü aynı boydalar. Diğer bir deyişle, (ushort []) (object) yeni kısa [] {0, -1} 'mükemmel olarak geçerlidir C#. – Gabe

+0

@Gabe: Aynı sorun. '(kısa) ((ushort) 1)' geçerli C# olduğu gibi (uzun) ((int) 1) '(berraklık için yedek döküm). Sorun, sayısal dönüşümleri ve kutudan çıkarmayı karıştırmaktır. http://blogs.msdn.com/b/ericlippert/archive/2009/03/19/representation-and-identity.aspx – Ani

cevap

7
List<short> sList = uList.Select(i => (short)i).ToList(); 
+0

Bu çözüm, IMO, standart LINQ olarak tercih ederim. –

+0

Burada tekrar kontrol etmeden önce bu şekilde uygulamıştım ve iyi çalıştı. Bu ve ConvertAll kullanarak performans farkı olup olmadığından emin değilim. –

9

Sen ConvertAll kullanabilirsiniz:

List<short> sList = uList.ConvertAll(x => (short)x);