无法将''类型的对象强制转换为''。'

时间:2017-07-13 04:56:09

标签: c# list for-loop

所以,我创建了一个IList<>像这样。

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

添加2个值是macdAgent和rsiAgent

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

但在for-loop部分

        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上,我怎么能解决这个问题呢?

3 个答案:

答案 0 :(得分: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 :(得分:1)

您可以使用IEnumerable.OfType方法根据元素的实际类型过滤集合。

var macdAgent = agentCollection.OfType<AgentMACD>().FirstOrDefault();
var rsiAgent = agentCollection.OfType<AgentRSI>().FirstOrDefault();

答案 2 :(得分:0)

只需检查哪个Type是您当前列表的元素,并像这样投射到该类型:

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];    
    }
}