所以,我创建了一个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上,我怎么能解决这个问题呢?
答案 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];
}
}