C# 如何选择<;T>;静态函数

C# 如何选择<;T>;静态函数,c#,C#,我有一个班级学生,里面有一个属性Studentname和address 我还有一个静态函数,如下面所示,可以通过地址(居住区) publicstaticlist-FilterByAddress(List-StudentList,stringaddress) { Type typeParameterType=typeof(T);//返回学生 StudentList=StudentList.FindAll(x=>x.address==address); 返回学生名单; } 我在代码“x.addr

我有一个班级学生,里面有一个属性
Studentname
address

我还有一个静态函数,如下面所示,可以通过
地址(居住区)

publicstaticlist-FilterByAddress(List-StudentList,stringaddress)
{
Type typeParameterType=typeof(T);//返回学生
StudentList=StudentList.FindAll(x=>x.address==address);
返回学生名单;
} 
我在代码“x.address”的这一部分遇到错误,错误42“T”不包含“Studentname”的定义,并且找不到接受类型为“T”的第一个参数的扩展方法“Studentname”(是否缺少using指令或程序集引用?)


我如何通过让T承认为学生班级来解决这个问题

根据您的评论更新:


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

通用的方法不能这样工作。如果要使用单个方法访问多个类上的公共
地址
属性,则需要让它们都实现一个接口,如
IHasAddress
(可怕的名称),然后在方法上定义一个通用约束,如
,其中T:IHasAddress

原始答案

如果您需要它成为
学生
,则不应将该方法设置为通用方法:

public static List<Student> FilterByAddress(List<Student> StudentList, string address )
{
   StudentList = StudentList.FindAll(x => x.address == address );            
   return StudentList;
} 
publicstaticlist-FilterByAddress(List-StudentList,stringaddress)
{
StudentList=StudentList.FindAll(x=>x.address==address);
返回学生名单;
} 

根据您的评论更新:


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

通用的方法不能这样工作。如果要使用单个方法访问多个类上的公共
地址
属性,则需要让它们都实现一个接口,如
IHasAddress
(可怕的名称),然后在方法上定义一个通用约束,如
,其中T:IHasAddress

原始答案

如果您需要它成为
学生
,则不应将该方法设置为通用方法:

public static List<Student> FilterByAddress(List<Student> StudentList, string address )
{
   StudentList = StudentList.FindAll(x => x.address == address );            
   return StudentList;
} 
publicstaticlist-FilterByAddress(List-StudentList,stringaddress)
{
StudentList=StudentList.FindAll(x=>x.address==address);
返回学生名单;
} 

向通用方法添加约束:

public static List<T> FilterByAddress<T>(List<T> StudentList, string address )
where T:Student 
publicstaticlist-FilterByAddress(List-StudentList,stringaddress)
T:学生

向通用方法添加约束:

public static List<T> FilterByAddress<T>(List<T> StudentList, string address )
where T:Student 
publicstaticlist-FilterByAddress(List-StudentList,stringaddress)
T:学生

问题在于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 FilterByAddress(List StudentList,string address),其中T:Student
{
Type typeParameterType=typeof(T);//返回学生
StudentList=StudentList.FindAll(x=>x.address==address);
返回学生名单;
} 

问题在于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 FilterByAddress(List StudentList,string address),其中T:Student
{
Type typeParameterType=typeof(T);//返回学生
StudentList=StudentList.FindAll(x=>x.address==address);
返回学生名单;
} 

如果
T
必须是
Student
,你真的不应该在这个方法中使用泛型。T可以是不同的,不一定必须是Student,它可以是其他类,而不是具有属性地址的类。因此,我希望此函数可以用于具有属性地址的类如果
T
必须是
Student
,您真的不应该在该方法中使用泛型。T可以不同,但不一定必须是Student,它不是具有属性地址的类。所以我希望这个函数可以用于具有属性地址的类