4
我旁邊LINQ查詢讀取的App.config實例使用完全合格的對象類型裏面說:LINQ和Activator.CreateInstance()創建副本
var strategies = from strategy in section.Strategies
let indicators = (
from indicator in strategy.Indicators
select (IIndicatorReader)Activator.CreateInstance(Type.GetType(indicator.Type), bot.Mt, section.Symbol))
let orders = (
from order in strategy.Orders
select new OrderInfo(order.Id, order.Operation.Value, order.Amount))
select (IStrategy)Activator.CreateInstance(Type.GetType(strategy.Type), section.Symbol, strategy.Amount, strategy.Limit, indicators, orders);
所以策略裏面,每次我打電話
indicatorList.Select(i => i.Operation)
這個實例發生:
(IIndicatorReader)Activator.CreateInstance(Type.GetType(indicator.Type), bot.Mt, section.Symbol))
和適當類的構造函數叫做。
但是,App.config中首先聲明的指示器實例化爲兩次,所有其他 - 一次。怎麼會這樣??我會很樂意提供任何所需的附加信息。
我的指示器集合:從非通用
實施GetEnumerator()
public class IndicatorElementCollection : ConfigurationElementCollection, IEnumerable<IndicatorElement>
{
...
public new IEnumerator<IndicatorElement> GetEnumerator()
{
return this.OfType<IndicatorElement>().GetEnumerator();
}
}
轉換到通用從this question on SO拍攝。
另一種實現:
foreach (OrderElement element in (System.Collections.IEnumerable)this)
{
yield return element;
}
作品以同樣的方式。
我重寫`IIndicatorReader`並使用`ToArray()`爲這兩個子查詢,但仍然得到重複的實例。在調試器中思考我在策略實例化之前看到一個2個指標的數組。可能是由於我實現了非泛型的`GetEnumerator()`轉換? (我更新了我的帖子) – abatishchev 2010-12-21 20:57:07