2016-04-14 55 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(); 

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