如何选择<;T>;在静态功能中
本文关键字:gt 静态 功能 lt 何选择 选择 | 更新日期: 2023-09-27 18:00:07
我有一个类Student,里面有一个属性Studentname
和address
。
我还有一个静态函数,如下所示,用于通过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可以是不同的,不是必须是学生,它是其他类而不是有属性的地址
泛型不以这种方式工作。如果你想使用一个方法访问多个类上的公共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