c#访问List <list <t >>中的类方法

时间:2018-09-21 18:34:51

标签: c#

我有一个课程希望嵌入锯齿列表中。我已将列表创建为List<T>[],但是无法从列表中插入或提取数据。

在下面的代码中,行

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

产生一个错误:

  

“错误CS1061'列表'不包含'AddSomething'的定义,并且找不到扩展方法'AddSomething'接受类型为'List'的第一个参数(您是否缺少using指令或程序集引用?)

jaggedList[i].Finish(); 

会产生类似的错误消息。

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);
    }
}

3 个答案:

答案 0 :(得分:0)

该错误很明显,因为实例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#扩展方法以获取更多信息。

答案 1 :(得分:0)

您需要了解这一行var node = document.getElementById(divToPrint); domtoimage.toPng(node) .then(function (dataUrl) { var link = document.createElement('a'); link.download = divToPrint + '.png'; link.href = dataUrl; link.click(); }); , jaggedList [2]是一个列表,您不能直接从其中访问MyList的方法。 不过,您可以尝试类似Uncaught (in promise) Event {isTrusted: true, type: "error", target: null, currentTarget: null, eventPhase: 0, …} Promise.then (async)

答案 2 :(得分:0)

mad.meesh有了答案。将代码更改为

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

解决了我所有的问题。感谢您的所有评论。