[英]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.