C#多个泛型

C#多个泛型,c#,generics,C#,Generics,我试图构建一个使用两种泛型类型(都带有约束)的类。该类中有一个属性,该属性是同时使用这两种泛型类型的列表。我的问题是,我希望列表中的某些项使用一种模型,但其他项使用不同的模型。这两个模型都符合给定给类的约束条件,但我找不到一种方法允许我这样做。让我提供模型和一些代码作为示例 型号: public class FeatureCollection<T, U> where T : BaseProperties where U : BaseGeometry { public stri

我试图构建一个使用两种泛型类型(都带有约束)的类。该类中有一个属性,该属性是同时使用这两种泛型类型的列表。我的问题是,我希望列表中的某些项使用一种模型,但其他项使用不同的模型。这两个模型都符合给定给类的约束条件,但我找不到一种方法允许我这样做。让我提供模型和一些代码作为示例

型号:

public class FeatureCollection<T, U> where T : BaseProperties where U : BaseGeometry
{
    public string name { get; set; } = "Name";
    public string type { get; set; } = "FeatureCollection";
    public List<Feature<T,U>> features { get; set; }
}
public class Feature<T, U> where T : BaseProperties where U : BaseGeometry
{
    public string type { get; set; } = "Feature";
    public U geometry { get; set; }
    public T properties { get; set; }
}

public class BaseGeometry
{
    public string type { get; set; }
}
public class BaseProperties
{
    public string type { get; set; }
}

public class PolygonGeometry : BaseGeometry
{
    public PolygonGeometry()
    {
        type = "Polygon";
    }

    public List<List<List<double>>> coordinates { get; set; } = new List<List<List<double>>>();
}

public class PointGeometry : BaseGeometry
{
    public PointGeometry()
    {
        type = "Point";
    }
    public List<double> coordinates { get; set; } = new List<double>();
}
公共类功能集合,其中T:BaseProperties,其中U:BaseGeometry
{
公共字符串名称{get;set;}=“name”;
公共字符串类型{get;set;}=“FeatureCollection”;
公共列表功能{get;set;}
}
公共类要素,其中T:BaseProperties,其中U:BaseGeometry
{
公共字符串类型{get;set;}=“Feature”;
公共U几何体{get;set;}
公共T属性{get;set;}
}
公共类基本几何
{
公共字符串类型{get;set;}
}
公共类基类属性
{
公共字符串类型{get;set;}
}
公共级多边形几何:基本几何
{
公共多边形几何()
{
type=“多边形”;
}
公共列表坐标{get;set;}=new List();
}
公共类PointGeometry:BaseGeometry
{
公共点几何()
{
type=“点”;
}
公共列表坐标{get;set;}=new List();
}
代码:

List features=new List();
var PolygongGeometry=新特征
{
几何=新的多边形几何
{
坐标=新列表(){new List{new List{}}
}
};
//新增(多边形几何);
var PointGeometry=新特征
{
几何图形=新的点几何图形
{
坐标=新列表{}
}
};
//添加(点几何);
FeatureCollection集合=新FeatureCollection{
特征=特征
};
如代码所示,我想在我的特征列表中添加一些几何类型为多边形几何的项,以及一些类型为点几何的项。如果有人对我如何以我自己的方式构建这个功能列表有任何想法,那将是一个巨大的帮助。谢谢大家!


另外,我的核心问题是,我需要将坐标属性定义为不同的类型,因此我假设是否有一种方法允许该字段为任何一种类型,这也可以作为我问题的解决方案。

您是否在寻找协方差?我想这可能对我有用。我去看看。实际上,如果这样做的话,比如说我试图根据派生类中存在的属性过滤主列表,那么我能做到吗?类似于'var features=newlist();var feat=newfeature{properties=newwinterdataproperties{Fips=“YO”};新增(多边形几何);其中(x=>x.properties.Fips==”)`对不起,我把评论搞乱了。与此类似,features.Where(x=>x.properties.Fips==“”);如果Fips是一个属性,则它存在于派生类中,但不存在于基类中。您可以使用LINQ的
.OfType()
仅筛选匹配的派生实例,或者
.Cast()
如果您知道它们都是派生类型。
List<Feature<WinterDataProperties, BaseGeometry>> features = new List<Feature<WinterDataProperties, BaseGeometry>>();

var PolygonGeometry = new Feature<WinterDataProperties, PolygonGeometry>
{
    geometry = new PolygonGeometry
    {
        coordinates = new List<List<List<double>>>() { new List<List<double>> { new List<double> { } } }
    }
};

//features.Add(PolygonGeometry);

var PointGeometry = new Feature<WinterDataProperties, PointGeometry>
{
    geometry = new PointGeometry
    {
        coordinates = new List<double> { }
    }
};

//features.Add(PointGeometry);

FeatureCollection<WinterDataProperties, BaseGeometry> collection = new FeatureCollection<WinterDataProperties, BaseGeometry> {
    features = features
};