为了账号安全,请及时绑定邮箱和手机立即绑定

具有相互引用的泛型类型的 C# 接口

具有相互引用的泛型类型的 C# 接口

C#
达令说 2021-06-04 15:39:56
目前我正在处理很多类和这些类的列表。以前我有静态方法,它会采用特定的类列表并返回列表的子集或单个项目。但是我认为让类继承 List 并在那里拥有必要的方法并且不再使它们成为静态的会更方便,因此它们适用于您正在使用的任何对象列表。我一直无法找到一种简单的方法将 List 转换为继承它的类,因此我在所有这些集合类中创建了一个方法来为我转换它。例子:public class Student {    public int Id {get;set;}    public string Name {get;set;}}public class Students : List<Student>{    public Student GetTopStudent()    {        return this.OrderByDescending(s => s.Grade).FirstOrDefault();    }    public Students GetPassingStudents()    {        return this.Where(s => s.Grade > 0.7).ToCollection();    }    public Students ToCollection(IEnumerable<Student> studentsList)    {        var students = new Students();        foreach(var s in studentsList)        {            students.Add(s);        }        return students();    ]}我有许多其他类和类列表,但这是一个非常简单的例子。我发现我的一些方法,例如“ToCollection()”方法在类之间几乎相同,但返回类型和列表中包含的类型除外。所以我尝试创建扩展和接口来自动处理这些方法。集合类和接口public abstract class Collection<T> : List<T>{    // Needed tie in the extension method with the List.Add() Method    public void Add(object item) => base.Add((T)item);}public interface IObjectWithId<T>     where T : IObjectWithId<T>{    int Id {get;set;}}public ICollectionItem<C>     where C : Collection<IcollectionItem<C>>{}public ICollectionItemWithId<C,T>     where C : Collection<ICollectionItemWithId<C,T>>    where T : IObjectWithId<T>{}扩展public static List<T> Get<T>(this IEnumerable<IobjectWithId<T>> list, List<int> ids)    where T : IObjectWithId<T>{    return list.Where(i => ids.Contains(i.Id))        .Cast<T>();        .ToList();}public static C Get<C, T>(this IEnumerable<IcollectionItemWithId<C, T>> list, List<int> ids)    where C : Collection<ICollectionItemWithId<C, T>>, new()    where T : IObjectWithId<T>{    return list.Where(i => ids.Contains(i.Id)).ToCollection();}我一直无法让这段代码工作。通常我在构建后会出错,要么没有从学生类到学生列表的隐式引用转换,要么是与拳击有关的错误。我担心我的接口引用彼此可能会产生很多问题,但是我这样做的原因是我不必指定方法的返回类型,尽管这可能是最简单的方法这点...
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信