如何选择<;T>;在静态功能中

本文关键字:gt 静态 功能 lt 何选择 选择 | 更新日期: 2023-09-27 18:00:07

我有一个类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"不包含"Studentname"的定义,也找不到接受"T"类型的第一个参数的扩展方法"Studentname"(您缺少using指令还是程序集引用?)

如何通过将T识别为学生类来解决此问题?

如何选择<;T>;在静态功能中

根据您的评论更新

T可以是不同的,不是必须是学生,它是其他类而不是有属性的地址

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

原始答案

如果你需要它是一个Student,你不应该使方法通用:

public static List<Student> FilterByAddress(List<Student> StudentList, string address )
{
   StudentList = StudentList.FindAll(x => x.address == address );            
   return StudentList;
} 

问题是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;
    } 

向泛型方法添加约束:

public static List<T> FilterByAddress<T>(List<T> StudentList, string address )
where T:Student