【问题标题】:returning a list<SomeType> from list<AnotherType>从 list<AnotherType> 返回一个 list<SomeType>
【发布时间】:2014-09-24 03:47:12
【问题描述】:

我正在尝试简化这个问题,请耐心等待。我知道如何使用接口,但对于我所从事的工作,我不太清楚如何使用它。这不是 sql 数据库,我可以闭着眼睛睡觉。

我有一个总体通用的一类事物的列表,但在这个列表中是一些属于另一种类型的子元素。例如,汽车......每辆车内还有其他东西,如风格等对象,所以我不认为我可以查看它的界面选项。

public class Cars
{
   public List<object> otherThingsAboutCar;
}


List<Cars> allCars = GetAListOfCars();

所以,在这个有限的汽车列表中,我只想要敞篷车。

List<Convertibles> justConvs = HowToGetFrom "allCars".

尽管出于心理理解的目的我尝试对其进行简化,但汽车是敞篷车的指示符实际上是汽车类中的子对象。所以它几乎就像我需要做类似的事情......

foreach( Cars c in allCars )
{
   if ( c.otherThingsAboutCar is a convertible )
      add this "c" to the List<Convertibles>
}

所以,虽然汽车是一种类型,但我需要在汽车内部寻找另一个特定元素,如果是,只返回那些。如果符合条件,我更喜欢像 IEnumerable 这样的选项来产生返回值,或者只返回提供的类型列表的函数。所以在这种情况下,我知道子组件的类型是 Convertible,但可能还有其他类型,所以我不能将其固定为仅返回 Convertibles 的函数。我研究了泛型并将它们理解为一个级别,但如果在该级别内,我希望子级别是另一个级别,我将如何去做。

希望解释够了,这里有一些示例

Car1
   otherThingsAboutCar
      Sedan
      6-Cyl
      Leather

Car2
   otherThingsAboutCar
      Convertible
      8-Cyl
      Leather

Car3
   otherThingsAboutCar
      Convertible
      6-Cyl
      Leather

Car3
   otherThingsAboutCar
      Coupe  
      6-Cyl
      Cloth

在这种情况下,我的外部汽车列表有 4 个条目。我想要一个仅包含两个敞篷车的数组(或类似的 Enumerable/List/)。如前所述,我也可能从相同的列表开始,并说我只想要那些具有皮革或 8 缸发动机的产品,因此我想到了泛型,但无法理解它。

【问题讨论】:

    标签: c# list generics ienumerable


    【解决方案1】:

    您可以使用泛型来实现,示例方法如下:

    public IEnumerable<Car> Select<T>(IEnumerable<Car> cars)
    {
        return cars.Where(c => c.otherThingsAboutCar.Any(other => other is T));
    }
    

    示例用法:

    var cars = new List<Car> { new Car { otherThingsAboutCar = new List<object> { new Sedan() } }, new Car { otherThingsAboutCar = new List<object> { new Convertible() } } };
    var convertibles = Select<Convertible>(cars);
    

    请注意,您也可以为IEnumerable&lt;Car&gt;编写扩展方法,选择权在您手中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      相关资源
      最近更新 更多