0

次のコードでは、項目のリストを持つ「CachedModel モデル」を渡そうとしていますList<CachedModel.CachedModelItem>。ただし、foreach は「アイテム」が好きではありません。また、Item.GetType() や Type myType = Item.GetType(); とも異なります。foreach(myType アイテム ...

エラー: 「型または名前空間名 'Item' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?)」

何か案は?

電話:

FillCache<CachedModel.CachedModelItem>(model, CachedEntitiesID);

方法:

public void FillCache<cachedModelItem>(ICachedModel model, int CachedEntitiesID)
        where cachedModelItem: ICachedModelItem, new()
    {
        ICachedModelItem Item = new cachedModelItem();

        foreach (Item item in model.Items)
        {
            string foo = item.foo.ToString();
        }
    }
4

2 に答える 2

1

Item100% 確信があるわけではありませんが、それがタイプであると言っている場合はICachedModelItem、メソッドを次のように変更してみてください。

public void FillCache<cachedModelItem>(ICachedModel model, int CachedEntitiesID)
        where cachedModelItem: ICachedModelItem, new()
{
    foreach (ICachedModelItem item in model.Items)
    {
        string foo = item.foo.ToString();
    }
}
于 2012-11-26T17:31:01.203 に答える
1

さらに重要なことは、あなたが知る必要がないということです。var キーワードを使用して、コンパイラにそれを理解させます。

foreach (var item in model.Items)
{
    // Do something
}

編集:何を求めているのか完全にはわかりませんが、LINQ の .Cast または .OfType 拡張メソッドを探している可能性があります。リスト内のすべてのアイテムが実際に指定したタイプであることが確実な場合は、Cast を使用します。一部のアイテムが一致しない可能性がある場合は、OfType を使用します。例えば:

foreach (var item in model.Items.OfType<MyType>())
{
    // Do something
}
于 2012-11-26T17:33:42.803 に答える