2

次のリストがあります。

public List<EntityBase> PossibleReplacements

タイプもあります

public Type type;

type には、EntityBase を継承する特定のクラス タイプが含まれます (これが私のアプリの動作です)。ここで、PossibleReplacements リストを「type」タイプのリストにキャストする必要があります。

このようなもの:

List<type> lijst = PossibleReplacements.Cast<type>();

しかし、これはエラーになります

'ReplacePopupModel.type' is a 'field' but is used like a 'type' 

私はまだこれに対する有効な解決策を見つけていません。

誰でも私を助けることができますか?

ありがとう。

4

3 に答える 3

1

Cast実行時にタイプセーフではないため使用できませんwhere。選択するために使用するだけです:

var lijst = PossibleReplacements.Where(t => t.GetType() == type);
于 2013-03-25T16:53:29.953 に答える
1

次のように、タイプに一致するアイテムを取得できます。

List<EntityBase> list = PossibleReplacements.Where(e => type.IsAssignableFrom(e.GetType())).ToList();

このリストには、 で指定した特定のタイプに一致する (またはそのサブクラスである) アイテムのみが含まれますtype

List<T>ただし、これはコンパイル時に認識されないため、特定の型にキャストすることはできません。

コンパイル時に既知の特定のタイプのアイテムを抽出しようとしている場合は、次を使用できます。

List<TheType> list = PossibleReplacements.OfType<TheType>().ToList();
于 2013-03-25T16:57:17.393 に答える
0

反射がないわけではなく、安全ではありません。ただし、Reed Copsey の最初のヒントに従って、すべてのエントリが型に割り当て可能かどうかを確認してから、リフレクト キャスト メソッドを使用できます。

var type = ...your type...

var cast = typeof(IEnumerable<>).GetMethod("Cast").MakeGenericMethod(type);
var list = cast.Invoke(PossibleReplacements, null);

変数listはになりobjectましたが、正しい型のリストへの参照があります。実際のタイプがわからないため、リストにアクセスするためのインターフェースがある場合があります(キャストが必要です)。

于 2013-03-25T17:02:05.120 に答える