我有一些类和接口
public interface IGeoObject
{
GeoCoordinate GetGeocoordinate();
}
public class User : IGeoObject
{
public GeoCoordinate GetGeocoordinate()
{
//...
return GeoCoordinate;
}
}
public class Venue : IGeoObject
{
public GeoCoordinate GetGeocoordinate()
{
//...
return GeoCoordinate;
}
}
public class Place : IGeoObject
{
public GeoCoordinate GetGeocoordinate()
{
//...
return GeoCoordinate;
}
}
我有,示例变量用户类型List<User>
我有签名的方法
double GetMinDistance(List<IGeoObject> objects, GeoCoordinate position)
我无法将用户传递给GetMinDistance
,因为泛型类型的协方差不起作用。
我可以创建额外的列表和使用方法.ConvertAll
(或.CasT<T>
):
List<IGeoObject> list = new List<User>(listUser).ConvertAll(x => (IGeoObject)x);
var dist = GeoTest.GetMinDistance(list, position);
我不确定这是最优雅的解决方案。最尴尬的是调用者必须做这个转换。
这类似于我在架构中的问题?还有更优雅的解决方案吗?
PS 长话短说,但我真的不能给出所有类同种的坐标。