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,它不是具有属性地址的类。所以我希望这个函数可以用于具有属性地址的类