C#2.0中的yield关键字行为
|
在一种方法中,我产生了一个自定义对象,可以重用。以后再屈服。
private IEnumerable<DistributorMonthlyComparisonData> ExtractMonthlyAggregate(String CSVFilepath)
{
DistributorMonthlyComparisonData unitData = new DistributorMonthlyComparisonData();
while (!reader.EndOfStream)
{
if(something){
// fill unitData
}
else{
yield return unitData;
}
}
}
在我程序的另一个对象中,我以这种方式调用所述方法:
List<DistributorMonthlyComparisonData> distribList = new List<DistributorMonthlyComparisonData>();
foreach (DistributorMonthlyComparisonData result in ExtractMonthlyAggregate(percorso))
{
distribList.Add(result);
}
如果我没有在yield方法中创建,则在每次yield之后都会创建一个新对象
unitData = new DistributorMonthlyComparisonData();
我所得到的只是一个相同对象的列表。
我想知道:这是否是因为unitData作为引用传递,因此List只是对相同对象的引用列表?每次创建新的unitData()都会更改要传递的unitData对象的哈希值?
请赐教。 :)
编辑我对为什么会这样感兴趣。
我曾经认为该框架应该在对象上进行写时复制,因此基本上产生一个对象然后修改其属性然后再次产生它应该导致将两个不同的对象添加到列表中。
没有找到相关结果
已邀请:
4 个回复
陈獭
/
将继续您放置它们的循环。因此,循环之前的代码仅在进入循环之前执行一次。您将不得不在循环内将“ 5”返回的对象“ 5”。 也就是说,您将不得不更换
与
眠皇
钾涎净介
豪抱怒掳
的默认实现不保证其返回值。因此,如果您没有自定义实现,则不应对此抱有任何期望。 在为类型定义相等性时(通过覆盖
),您也必须覆盖
,并确保比较相等的对象具有相同的哈希码。