私はLabFileBaseという基本クラスを持っています。リストを作成し、派生クラスを追加しました。私は定義したキーに基づいて特定のオブジェクトのリストを検索したい。私が抱えている問題は、LINQ式でどのようにダウンキャストしているかです。ダウンキャスティングとLinq
ここではいくつかのサンプルコードです:
public abstract class LabFileBase
{
}
public class Sample1 : LabFileBase
{
public string ID {get;set;}
public string Name {get;set;}
//..
}
public class Sample2 : LabFileBase
{
public string ID {get;set;}
public string Name {get;set;}
//..
}
私は特定のサンプル2タイプを検索したいが、私は私はこのような通常のforeachループを使用した場合にダウンキャストする必要があります。
foreach(var s in processedFiles) //processedFiles is a List<LabFileBase>
if (s is Sample2)
var found = s as Sample2;
if (found.ID = ID && found.Name == "Thing I'm looking for")
//do extra work
私は多くの場合、次のようなものがあります。
var result = processedFiles.Select(s => s.ID == SomeID && s.Name == SomeName);
これは可能なのでしょうか、構文的な句読点他のオブジェクトのために私の唯一のオプションであるforeach
です。 Sample1とSample2のIDと名前は同じフィールドのみです。
編集:ご協力いただきありがとうございます。私は実装するためにバックログにほとんどすべてを入力しました。
seq.OfType()は、seq.Where(el => elはMyFavType)のように機能します。 –
yfeldblum
@ジョン:私は間違いなくIDと名前をベースクラスに移すことを考えます。私はそれについてもっと考えると、彼らは本当にそこに属しています。 – Chris
@ジャスティス:それは*でも*ターゲットタイプのシーケンスで終わっているからです。それはseq.Whereのようなものです。(...)キャスト<...>() –