gpt4 book ai didi

.net - 存储库模式和抽象类的问题

转载 作者:行者123 更新时间:2023-12-01 09:08:59 25 4
gpt4 key购买 nike

在存储库模式与抽象类的使用相结合时遇到问题。

我有一个存储库,它实现了一个返回抽象类型 ICollection 的方法。

这是我的抽象类:

public abstract class Location
{
public abstract string Name { get; set; }
public abstract LocationType Type { get; }
}

这是该抽象类的具体实现:

public class Country : Location
{
public override string Name { get; set; }
public override LocationType Type { get { return LocationType.Country; } }
}

这是我的存储库:

public class LocationsRepository : Locations.Repository.ILocationsRepository
{
public ICollection<Location> GetAllLocations()
{
Country america = new Country { Name = "United States" };
Country australia = new Country { Name = "Australia" };
State california = new State { Name = "California", Country = america };

return new List<Location>() { america, australia, california };
}
}

到目前为止一切顺利。

现在是服务:

public class CountryService : ICountryService
{
private ILocationsRepository repository;

public CountryService()
{
// in reality this is done by DI, but made 'greedy' for simplicity.
this.repository = new LocationsRepository();
}

public List<Country> GetAllCountries()
{
// errors thrown by compiler
return repository.GetAllLocations()
.Where(l => l.Type == LocationType.Country)
.ToList<Country>();
}
}

有问题。我正在尝试从返回 Country 的存储库中返回具体类型的列表( ICollection<T> )抽象类型的。

得到 2 个编译时错误:

'System.Collections.Generic.IEnumerable' does not contain a definition for 'ToList' and the best extension method overload 'System.Linq.ParallelEnumerable.ToList(System.Linq.ParallelQuery)' has some invalid arguments

Instance argument: cannot convert from 'System.Collections.Generic.IEnumerable' to 'System.Linq.ParallelQuery'

那么,我该如何实现这个模式呢?

我可以理解这个问题(你不能实例化一个抽象类型),那么 Enumerator (.ToList) 是否尝试实例化它,因此会出现错误?

如果你不明白我想做什么:

  • 我希望我的存储库返回 ICollection<T>抽象类型的
  • 我希望我的服务(每种具体类型都有一个)返回基于该单一存储库方法的具体类型列表

这只是 LINQ 语法的一个例子吗?还是我的设计模式完全错误?

最佳答案

repository.GetAllLocations().OfType<Country>().ToList();

你甚至不需要 LocationType 枚举

关于.net - 存储库模式和抽象类的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3368239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com