2011-07-11 20 views
9

Bir WinForms ListBox'ı doldurmak için aşağıdaki C# kodunu kullanıyorum. Ancak tüm Sistem klasörlerini gizlemek istiyorum. Örneğin, $ RecyclingBin gibi. Ama bana şu hatayı veriyor.System.ArgumentException: Karmaşık DataBinding bir veri kaynağı olarak kabul eder, bir IList veya bir IListSource

System.ArgumentException: Karmaşık DataBinding, bir IList veya bir IListSource olan bir veri kaynağı olarak kabul eder.

LINQ için yeni olmak, benim için kafa karıştırıcı olmaktan daha fazlasıdır. Nerede yanlış gittiğimi söyleyen var mı?

string[] dirs = Directory.GetDirectories(@"c:\"); 
var dir = from d in dirs 
      where !d.StartsWith("$") 
      select d; 

listBox.DataSource = (dir.ToString()); 
+3

Böyle durumlarda, [DirectoryInfo] (http://msdn.microsoft.com/en-us/library/system.io.directoryinfo.aspx) adresine bağlanmayı severim. Dizelerden daha kolay anlaşılır ve bunları filtrelemek için [Nitelikler] 'i (http://msdn.microsoft.com/en-us/library/system.io.filesysteminfo.attributes.aspx) kullanabilirsiniz. – Will

cevap

21

Değişimi:

listBox.DataSource = (dir.ToString()); 

için:

listBox.DataSource = dir.ToList(); 

dir.ToString() da yararlı olmayan hangi enumerable bazı açıklamasına tükürür olacaktır. Hata mesajı, bir listeye ihtiyacı olduğunu gösterir, dolayısıyla .ToList().

İlgili konular