1

我有一个班级 Student ,里面有一个属性Studentnameaddress

我还有一个像下面这样的静态函数,供我过滤学生address(living area)

public static List<T> FilterByAddress<T>(List<T> StudentList, string address )
    {
       Type typeParameterType = typeof(T); // it is returning Student 
       StudentList = StudentList.FindAll(x => x.address == address );            
       return StudentList;
    } 

我在这部分代码“x.address”上收到错误,即错误 42“T”不包含“学生名”的定义,并且找不到接受“T”类型的第一个参数的扩展方法“学生名” (您是否缺少 using 指令或程序集引用?)

我怎样才能通过让 T 识别为学生类来解决这个问题?

4

3 回答 3

4

更新根据您的评论:

T 可以不同,不一定必须是 student ,它是具有属性 Address 的其他类

通用不以这种方式工作。如果你想Address使用一个方法访问多个类的公共属性,你需要让它们都实现一个接口,比如IHasAddress(可怕的名字),然后在你的方法上定义一个通用约束,比如where T : IHasAddress

原始答案

如果您需要它是 a Student,则不应将该方法设为通用:

public static List<Student> FilterByAddress(List<Student> StudentList, string address )
{
   StudentList = StudentList.FindAll(x => x.address == address );            
   return StudentList;
} 
于 2013-02-19T05:08:36.313 回答
1

问题是 T 是通用的并且没有地址的概念,您需要关闭 T 的编译器选项才能说它至少是“学生”

public static List<T> FilterByAddress<T>(List<T> StudentList, string address ) where T: Student
    {
       Type typeParameterType = typeof(T); // it is returning Student 
       StudentList = StudentList.FindAll(x => x.address == address );            
       return StudentList;
    } 
于 2013-02-19T05:11:02.870 回答
0

向泛型方法添加约束:

public static List<T> FilterByAddress<T>(List<T> StudentList, string address )
where T:Student 
于 2013-02-19T05:09:58.610 回答