【发布时间】:2017-09-12 18:21:43
【问题描述】:
在我的代码中,我有三个(或更多...)不同的对象,它们都具有相同的属性(例如 TrackingItemType、ReaderID 等)。
它们是从 CounterBase 派生的(它没有所需的属性,但有其他属性)。
现在我想遍历这些对象的集合。在集合中,所有三个对象都可以出现。因此,目前我已经为每个对象分别实现了“update”。
问题:如何避免重复编写代码?有没有 模式可用于更新具有相同的不同对象 属性?!
谢谢!
感兴趣的方法:
private void UpdateTrackingCounters(Reading readingData, TrackingItemType trackingItemType, string trackingCounterType)
{
try
{
foreach (CounterBase counter in this.TrackingCounters)
{
if (typeof(TrackingSimpleCounter).IsInstanceOfType(counter))
{
TrackingSimpleCounter trackingCounter = (TrackingSimpleCounter)counter;
if (trackingCounter.TrackingCounterType == trackingCounterType)
{
if ((trackingCounter.ReaderID == 0
&& trackingCounter.TrackingItemType == null)
|| (trackingCounter.ReaderID == 0
&& trackingCounter.TrackingItemType == trackingCounter.TrackingItemType)
|| (trackingCounter.ReaderID == readingData.ReaderId
&& trackingCounter.TrackingItemType == null)
|| (trackingCounter.ReaderID == readingData.ReaderId
&& trackingCounter.TrackingItemType == trackingCounter.TrackingItemType)
)
{
trackingCounter.IncreaseOne();
}
}
}
else if (typeof(TrackingIntervalBasedRollingCounter).IsInstanceOfType(counter))
{
TrackingIntervalBasedRollingCounter trackingCounter = (TrackingIntervalBasedRollingCounter)counter;
if (trackingCounter.TrackingCounterType == trackingCounterType)
{
if ((trackingCounter.ReaderID == 0
&& trackingCounter.TrackingItemType == null)
|| (trackingCounter.ReaderID == 0
&& trackingCounter.TrackingItemType == trackingCounter.TrackingItemType)
|| (trackingCounter.ReaderID == readingData.ReaderId
&& trackingCounter.TrackingItemType == null)
|| (trackingCounter.ReaderID == readingData.ReaderId
&& trackingCounter.TrackingItemType == trackingCounter.TrackingItemType)
)
{
trackingCounter.IncreaseOne();
}
}
}
else if (typeof(TrackingTriggerBasedRollingCounter).IsInstanceOfType(counter))
{
TrackingTriggerBasedRollingCounter trackingCounter = (TrackingTriggerBasedRollingCounter)counter;
if (trackingCounter.TrackingCounterType == trackingCounterType)
{
if ((trackingCounter.ReaderID == 0
&& trackingCounter.TrackingItemType == null)
|| (trackingCounter.ReaderID == 0
&& trackingCounter.TrackingItemType == trackingCounter.TrackingItemType)
|| (trackingCounter.ReaderID == readingData.ReaderId
&& trackingCounter.TrackingItemType == null)
|| (trackingCounter.ReaderID == readingData.ReaderId
&& trackingCounter.TrackingItemType == trackingCounter.TrackingItemType)
)
{
trackingCounter.IncreaseOne();
}
}
}
}
}
catch (Exception ex)
{
this.Trace.Error(ex);
}
}
【问题讨论】: