2016-04-14 22 views
-2

的线I得到了错误:固定在C#的线WPF

IEnumerator enumerator = this.ListBox1.Items.GetEnumerator(); 
while (enumerator.MoveNext()) 
{ 
    object objectValue = RuntimeHelpers.GetObjectValue(enumerator.Current); 
    list2.Add(Conversions.ToString(objectValue)); 
} 

误差在第一行。

错误,我得到:

错误1 'System.Windows.Data.CollectionView.GetEnumerator()' 不可访问由于其保护级别

如何解决呢?

thx为帮手!

MahApps WPF应用程序

+4

你有没有任何理由不只是使用'foreach'循环? –

+0

为什么不只是做foreach(listbox1.items中的对象o){list2.add(转换.tostring(o);}(不包括项目的套管) – BugFinder

+1

有关Stackoverflow的更多问题,请阅读如何提出一个好问题这个问题的一部分,你的头衔根本不涉及问题,在阅读之前没有办法知道问题是什么。 –

回答

0

只需做到以下几点:

foreach (var item in this.ListBox1.Items) 
{ 
    list2.Add(Conversions.ToString(item)); 
} 
3

最简单的解决将是使用迭代器的语言支持:

foreach (object value in ListBox1.Items) 
{ 
    list2.Add(Conversions.ToString(value)); 
} 

如果您预计值已是字符串,你可以隐式地为你投射foreach环:

foreach (string value in ListBox1.Items) 
{ 
    list2.Add(value); 
} 

或者如果你无论如何创建一个新的列表,你可以使用一个班轮:

var list2 = ListBox1.Items.Cast<string>().ToList(); 

当前的代码不起作用的原因是CollectionView使用显式接口实现IEnumerable。您可以改变你的代码只是:

IEnumerator enumerator = ((IEnumerable)this.ListBox1.Items).GetEnumerator(); 

...但它会更好地使用上面的方法之一。