問題を表示するためのより単純な方法として、次のコードを作成しました。
このバージョンをコンパイラで実行していないため、タイプミスがある可能性があります。
継承されたクラスを含むリストを検索するためのより簡潔な方法 (またはより良い方法) があるかどうかを探しています。
public class Engine {
public String FuelType { get; set; }
}
----------------------------------------------------------------------------
public class Wheel {
public String TyreType { get; set; }
}
----------------------------------------------------------------------------
public abstract class Car {
public abstract String Model { get; }
}
public class Ford : Car {
public override String Model {
get { return "Mustang"; } // Hardcoded for brevity
}
Public Engine Engine { get; set; }
}
public class Porche : Car {
public override String Model {
get { return "911"; } // Hardcoded for brevity
}
Public Wheel Wheel { get; set; }
}
----------------------------------------------------------------------------
// CarCollection as follows:
// Ford("mustang") > Engine > FuelType > "Petrol"
// Ford("mustang") > Engine > FuelType > "Diesel"
// Porche("911") > Wheel > TyreType > "Dry"
List<Car> carCollection = GetCarcollection();
私が欲しいのは、' Ford("Mustang") > Engine > FuelType > "Petrol" ' への参照です。(コレクションには 1 つしか含まれないと仮定します)
//-- Start --
List<Ford> fordCollection = carCollection.FindAll( cc => cc.Model == "Mustang" )
.Cast<Ford>().ToList();
上記の FuelType にアクセスできないので、以下の別のステートメントでアクセスします。
// This 'ford' is the reference I require
Ford ford = fordCollection.Find( fc => fc.Engine.FuelType == "Petrol" );
//-- Finish --
これは機能しますが、上記の 2 つのステートメントを 1 つに結合することは可能です。
クラス構造は単純な例にすぎず、設計は実際のコードとは完全に関連していません。