最近我正在做關於開發編輯器的項目, 爲什麼C#列表可以允許我使用ADD函數,但我不能通過索引 指定值可以任何人提供幫助嗎?C#索引超出範圍。必須是非負的,並小於集合的大小
回答
List<List<String>> datalist = new List<List<String>>();
....
datalist[tag.Count-1]=datasublist;
是一個問題,因爲你試圖分配一些不存在的東西。列表不像數組,它聲明瞭一個特定的大小,並可以使用你所做的任何部分。由於您已將datalist
聲明爲一個沒有任何內容的新List,因此您無法更改任何內容。您需要使用
datalist.Add(datasublist);
,不相關的一邊,正如我在評論中指出,可以更換
line.Substring(26, EndOfIndex)
隨着
line.Substring(26)
默認情況下將返回剩下的的字符串。也會讓你刪除EndOfIndex
變量。
我假設的錯誤就行了:
datalist[tag.Count-1]=datasublist;
乍一看它似乎我像你想Dictionary<int, List<string>>
或更好,但也許Dictionary<string, List<string>>
。在這種情況下,您既可以存儲值tag.Count - 1
,也可以存儲剛添加的標籤的值。但是,第二個想法是在循環中重複上面的行,看起來你只是想將一串字符串添加到關聯列表中。
所以,我建議使用一個類來存儲標記名稱及其相關數據一起:
class TagInfo
{
public string TagName {get; set;}
private readonly List<string> data = new List<string>();
public List<string> Data {get {return data;}}
}
這將然後允許你這樣做:
List<TagInfo> tags = new List<TagInfo>();
while (line != null)
{
if (line.Substring(0, 26) == "CRDI-CONTROL %%LINES-BEGIN")
{
string tagName = line.Substring(26);
TagInfo tag = new TagInfo {TagName = tagName};
tags.Add(tag);
line = reader.ReadLine();
while (line.Substring(0, 24) != "CRDI-CONTROL %%LINES-END")
{
tag.Data.Add(line.Replace(" ", String.Empty));
line = reader.ReadLine();
}
}
你可以如果您需要稍後按名稱查找標記,則可以更先進並使用Dictionary<string, TagInfo>
。只需將標籤名稱存儲爲密鑰即可。你也許可以通過添加一個帶有標籤名稱的構造函數來清理代碼,或者甚至可以根據需要創建自己的代碼TagInfoCollection
。
此行無法在我的程序中運行tag.Data.Add(line.Replace(「」,String .Empty)); – user3750656
- 1. '索引超出範圍。必須是非負數並小於集合的大小
- 2. 指數超出範圍。必須是非負的,並小於集合的大小
- 3. 指數超出範圍,必須是非負數,並小於集合的大小
- 4. C#:索引超出範圍,必須是非負數並小於集合的大小
- 5. c#>索引超出範圍。必須是非負數並且小於集合的大小
- 6. 指數超出範圍。必須是非負數且小於集合的大小
- 7. 指數超出範圍。必須是非負數且小於集合的大小。
- 8. 索引超出範圍。必須是非負的並且小於集合的大小
- 9. 錯誤=索引超出範圍。必須是非負數且小於集合的大小。參數名稱:索引「
- 10. 「索引超出範圍,必須是非負數,小於集合的大小參數名稱:索引」
- 11. 錯誤:索引超出範圍。必須是非負數且小於集合的大小。參數名稱索引:
- 12. :索引超出範圍。必須是非負數且小於集合的大小。參數名稱:索引
- 13. 錯誤:索引超出範圍。必須爲非負且小於集合的
- 14. 指數超出範圍。必須爲非負且小於集合的大小
- 15. 指數超出範圍。必須爲非負且小於集合的大小
- 16. 「索引超出範圍,必須爲非負值,小於集合的大小。\ r \ n參數名稱:索引
- 17. 指數超出範圍。必須是非負值或小於收集的大小
- 18. Listview Datapager - 索引超出範圍。必須爲非負且小於集合
- 19. 如何解決索引超出範圍。必須是非負數且小於集合的大小。錯誤
- 20. excpetion錯誤:索引超出範圍。必須是非負值且小於集合的大小
- 21. 指數超出範圍。必須是非負數且小於集合的大小。參數名稱索引
- 22. 指數超出範圍。必須是非負數且小於集合的大小。參數名稱:索引
- 23. 指數超出範圍。必須是非負數且小於集合的大小。參數名稱:索引SQLite
- 24. 錯誤:索引超出範圍。必須是非負數且小於集合的大小。參數名稱:index
- 25. 指數超出範圍。必須是非負數且小於集合的大小。參數名稱索引:
- 26. 錯誤「索引超出範圍必須爲非負數且小於集合的大小參數名:指數」
- 27. 錯誤GXJMake:「索引超出範圍必須爲非負數且小於集合的大小。」
- 28. 斷言索引超出範圍。必須爲非負且小於集合的大小
- 29. 指數超出範圍。必須是非負的並且小於列表中的集合的大小<string>
- 30. 指數超出範圍。必須是非負的,並且小於集合的大小
當您第一次嘗試按索引引用元素時,您的列表是否包含任何數據? – IrishGeek82
你可以用'line.Substring(26)'替換'line.Substring(26,EndOfIndex)'。它會默認返回字符串的其餘部分 – cost
我們無法訪問您的輸入,因此請嘗試設置一些中斷點並逐步完成代碼。如果問題不明顯,那麼讓我們知道哪一行正在拋出異常,以及當時各種變量的值是多少。 –