簡體   English   中英

c#訪問列表中的類方法 <List<T> &gt;

[英]c# accessing class methods in List<List<T>>

我有一類希望嵌入鋸齒狀列表中的課程。 我已將列表創建為List<T>[]但是無法從列表中插入或提取數據。

在下面的代碼行中

jaggedList[2].AddSomething("this is a string"); 

產生錯誤:

“錯誤CS1061'列表'不包含'AddSomething'的定義,並且找不到找到接受類型為'List'的第一個參數的擴展方法'AddSomething'(您是否缺少using指令或程序集引用?)

jaggedList[i].Finish(); 

產生類似的錯誤消息。

otheFunctions(ref jaggedList[i], i);還有一個問題otheFunctions(ref jaggedList[i], i); 行,編譯器錯誤為:

CS1503參數1:無法從“ ref System.Collections.Generic.List”轉換為“ ref ListList.MyList”

但不是列出jaggesList [I]是什么嗎? 我懷疑這是我的問題,但不知道到底是什么。

class Program
{
    static void Main(string[] args)
    {
        int dynamicallyEstablishedLength = 0;

        dynamicallyEstablishedLength = 4;
        List<MyList>[] jaggedList = new List<MyList>[dynamicallyEstablishedLength];

        for (int i = 0; i < jaggedList.Length; i++)
            jaggedList[i] = new List<MyList>(); //allocate space for each element

        jaggedList[2].AddSomething("this is a string");

        for (int i = 0; i < jaggedList.Length; i++)
            otheFunctions(ref jaggedList[i], i);

        for (int i = 0; i < jaggedList.Length; i++)
            jaggedList[i].Finish();
    }

    void otheFunctions(ref MyList list, int i)
    {
        list.AddSomething("this is string" + i.ToString());
    }
}

public class MyList
{
    private List<string> list;

    public MyList()
    {
        list = new List<string>();
    }

    public void AddSomething(string line, int trace = 0)
    {
        //do some processing on line
        //then
        list.Add(line);
    }

    public void Finish()
    {
        foreach (string s in list)
            Trace.WriteLine(s);
    }
}

該錯誤很明顯,因為實例List<MyList>[] jaggedList = new List<MyList>...的類型為List<>而不是MyList 解決這種問題的方法很少,即在類型List<>上創建擴展方法:

public static class ListExtensionMethods
{
    ...

    static public void AddSomething<T>(this List<T> list, string line, int trace = 0)
    {
        //do some processing on line
        //then
        list.Add(line);
    }

    static public void Finish<T>(this List<T> list)
    {
        ...
    }

    ...
}

或者,使用類型MyList代替List<>

MyList[] jaggedList = new MyList[100];
...
jaggedList[0].AddSomething(...)

第二個錯誤是第一個錯誤的結果。 請搜索c#擴展方法以獲取更多信息。

您需要了解這一行jaggedList[2].AddSomething("this is a string"); ,jaggedList [2]是一個列表,您不能直接從其中訪問MyList的方法。 但是,您可以嘗試類似jaggedList[2][1].AddSomething("this is a string");

mad.meesh得到了答案。 將代碼更改為

MyList[] jaggedList = new MyList[dynamicallyEstablishedLength];
for (int i = 0; i < jaggedList.Length; i++)
    jaggedList[i] = new MyList();

解決了我所有的問題。 感謝您的所有評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM