【发布时间】:2021-05-07 16:54:03
【问题描述】:
我有 2 个具有方法 isSenior() 的数据类。
public class Staff : Member, IComparable<Staff>, IEquatable<Staff>
{
public string Occupation { get; set; }
public override bool isSenior()
{
var today = DateTime.Today;
var age = today.Year - Birthday.Year;
if (age > 65)
{
return true;
}
return false;
}
}
和
public class Player : Member, IComparable<Player>, IEquatable<Player>
{
public double Height { get; set; }
public string Position { get; set; }
public string Club { get; set; }
public bool Invited { get; set; }
public bool Captain { get; set; }
public override bool isSenior()
{
var today = DateTime.Today;
var age = today.Year - Birthday.Year;
if (age > 30)
{
return true;
}
return false;
}
}
我想在另一个返回所有高级人员列表的通用方法中使用此方法,例如
List<Player> allSeniorPlayers = TaskUtils.findSeniorMembers<Player>(allPlayers)
是否可以像这样调用 isSenior() 方法:
public List<T> findSeniorMembers<T>(List<T> allMembers)
{
List<T> seniorMembers = new List<T>();
foreach (T member in allMembers)
{
if(member.isSenior())
{
seniorMembers.Add(member);
}
}
return seniorMembers;
}
错误出现在 member.isSenior() 上。有没有办法让这个工作?
【问题讨论】:
-
您没有显示
isSenior的声明位置,但假设它在Member中,我怀疑您只需要约束T:public List<T> findSeniorMembers<T>(List<T> allMembers) where T : Member。更多注意事项:1) 方法主体可以是allMembers.Where(member => member.IsSenior()).ToList();2) 现在是修改名称以遵循 .NET 命名约定的好时机 - 方法应以大写字母开头; 3)IsSenior听起来通常是一个属性,而不是一个方法。
标签: c# object generics generic-list