列表与int数组 - 访问数组

时间:2015-05-31 14:23:16

标签: c# list

我有一个班(学生)说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中。什么都行不通。

提前感谢您的帮助。

我对此很新,可能错过了明显的......

2 个答案:

答案 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处调用元素(没有索引器?)。