我有一个班(学生)说2个字符串和一个int数组
然后第二节课这样做:
List<student> myS = new List<student>();
所有这一切都正常,我有一个包含多个学生的列表。但是,我无法访问int[]
中的值。
因此,我的学生列表从数据库填充到列表中。
然后我有一个泛型类,它有一个参数List,然后我想要它作为数据表。将为学生类,主题类和其他类调用泛型类 - 其中一些可能包含数组,而另一些则不包含数组。
如果我调试并单步执行,我会得到以下内容: (()myS.stu [6] .termMark [1],值为50.但是如果我输入int d = stu [6] .termMark [1],则错误是T不包含termMark的定义而且没有扩展名可以找到方法'termMark'接受类型T的第一个参数。
int d = myS[0][1]
返回错误
无法将带有[]的索引应用于类型为“T”的表达式
。我尝试了各种各样的事情,比如创建一个单独的列表并将其添加到myS中。什么都行不通。
提前感谢您的帮助。
我对此很新,可能错过了明显的......
答案 0 :(得分:1)
您必须阅读Generic Constraints 对于类型为T的参数,你不能做太多 如果您的函数接受student类型的参数,请添加类似
的约束private static void NewMethod<T>(List<T> myS) where T : student
{
int d = myS[0].IntArray[1];
}
以下与您的问题无关...... 如果您在班级中添加indexer,则可以缩短
public class student
{
public int[] IntArray;
public int this[int x]
{
get
{
return IntArray[x];
}
}
}
private static void NewMethod<T>(List<T> myS) where T : student
{
int d = myS[0][3];
}
答案 1 :(得分:0)
类型T
可能不包含索引器的任何定义。但是,你的领域(int[]
)确实如此。因此,不要在您的对象(student
)上调用索引器,而是在其字段上调用它。所以,对于这个答案,我会假设您的对象被声明为类似
public class student {
public string S { get; set; }
public string s { get; set; }
public int[] integers { get; set; }
}
现在,您确实可以在整数字段上调用indexers
,但不能在学生对象本身上调用它(它没有任何索引机制)。如,
int d = myS[0].integers[1]; // <-- your code should be
上面的代码(如果已编译)将为您提供列表中第一个对象的索引1(第二个元素)的元素。你是在学生的索引1处调用元素(没有索引器?)。