這里是 C# 的新手。在我的代碼中,我想構建一個字串串列,然后將第一個元素從串列的前面彈出:
1 public class foo
2 {
3 public List<String> listo;
4
5 public foo()
6 {
7 this.listo = new List<String>();
8 listo.Add("Apples");
9 listo.Add("Oranges");
10 listo.Add("Bananas");
11 RemoveAndPrintAll();
12 }
13
14 public void RemoveAndPrintAll()
15 {
16 while(listo.Count > 0)
17 {
18 System.Console.WriteLine(this.listo.RemoveAt(0));
19 }
20 }
21 }
MS Visual Studio 告訴我第 18 行有語法錯誤,特別是這部分:
this.listo.RemoveAt(0)
錯誤是CS1503,它沒有非常有用的描述:
引數“數字”無法從 TypeA 轉換為 TypeB
方法中一個引數的型別與實體化類時傳遞的型別不匹配。此錯誤通常與 CS1502 一起出現。有關如何解決此錯誤的討論,請參閱 CS1502。
CS1502隱約有用:
當傳遞給方法的引數型別與該方法的引數型別不匹配時,會發生此錯誤。如果被呼叫的方法被多載,那么所有多載版本都沒有與傳遞的引數型別匹配的簽名。
那么到底是什么?問題的根源是這樣的:
- 我創建一個串列,然后用字串填充它
- 后來,我嘗試從串列中洗掉字串......只有編譯器不再認為元素是字串。
如果有什么特別的事情我需要在這里做?當需要從串列中洗掉元素時,為什么編譯器無法識別元素的資料型別?謝謝
uj5u.com熱心網友回復:
在您的代碼中,
listo.RemoveAt(0)
將僅洗掉串列中的第 0 個元素。你可以這樣做;
if(listo != null && listo.Any())
{
for(int indexToRemove =0; indexToRemove < listo.Count; indexToRemove )
{
list.RemoveAt(indexToRemove);
}
}
uj5u.com熱心網友回復:
List<T>.RemoveAt(index)不回傳任何內容(它具有void回傳型別)。您需要先獲取第一個元素,然后再將其洗掉
while (listo.Count > 0)
{
Console.WriteLine(listo[0]);
listo.RemoveAt(0);
}
也就是說,考慮使用Stack<T>而不是List<T>@yassinmi 指出的那樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/498398.html
