2017-07-13 12 views
-1

だから、IListを作成します<>これを好きです。 2値を追加するタイプ ''にタイプ ''のオブジェクトをキャストできません。

private IList<Agent> m_agentCollection = new List<Agent>(); 

macdAgentとrsiAgent

m_agentCollection.Add(macdAgent); 
m_agentCollection.Add(rsiAgent); 

ですが、forループ部分

 for (int i = 0; i < m_agentCollection.Count; i++) 
     { 
       AgentMACD macdAgent = (AgentMACD)m_agentCollection[i];    
       AgentRSI rsiAgent = (AgentRSI)m_agentCollection[i]; 
     } 

に、私は型のオブジェクトをキャストすることができませんを得る '.AgentMACD' と入力します'.AgenRSI'。 '

これは、AgentMACDがインデックス0にあり、AgentRSIがインデックス1にあり、これをどうやって達成できるのでしょうか?

+0

あなたのリストには異なるタイプのインスタンスが含まれています。すべてのアイテムを繰り返し処理し、可能なすべてのタイプに各アイテムをキャストします。これはあなたが1つのタイプと多くのエイリアス名を持っている場合にのみ機能します。あなたは本当の種類があると思います。 (m_agentCollection [i]がAgentRSI rsiAgentの場合){/ * rsiAgent * /}を使用している場合 ' –

+0

{/ * macdAgent * /}を使用して、配列インデックスをチェックして、同じインデックスでキャストしないようにする必要があります: 'if(i == 0){AgentMACD macdAgent =(AgentMACD)m_agentCollection [i]; } else if(i == 1){AgentRSI rsiAgent =(AgentRSI)m_agentCollection [i]; } ' –

+0

これまでに理解してきたことから、リスト(0)にAgentMACDがあり、リスト(1)にAgentRSIなどがあります。ですから、それらの間にi ++を追加してください。単に。 –

答えて

1

foreach (var agent in m_agentCollection) 
    { 
     if (agent is AgentMACD) 
     { 
      AgentMACD macdAgent = agent as AgentMACD; 
     } 
     else if (agent is AgentRSI) 
     { 
      AgentRSI rsiAgent = agent as AgentRSI; 
     } 
    } 
1

リストのアイテムが対応するタイプに基づいてキャストする必要があります。

これを試してください:あなたがに基づいてフィルタリング収集のためIEnumerable.OfType方法を使用することができます

for (int i = 0; i < m_agentCollection.Count; i++) 
{ 
    if(m_agentCollection[i] is AgentMACD) 
    { 
     AgentMACD macdAgent = (AgentMACD)m_agentCollection[i];  
    } 
    else if(m_agentCollection[i] is AgentRSI)  
    { 
     AgentRSI rsiAgent = (AgentRSI)m_agentCollection[i];  
    } 
} 
0

だけチェックそのうちTypeは、あなたの現在のリストの要素とキャストは、このような、その型にあり要素の実際の型。

var macdAgent = agentCollection.OfType<AgentMACD>().FirstOrDefault(); 
var rsiAgent = agentCollection.OfType<AgentRSI>().FirstOrDefault(); 
関連する問題