我有一个"测试"具有IEnumerable具体对象的类
public class Test
{
public IEnumerable<MyObject> MyObjects { get; }
}
public class MyObject
{
public string Id { get; }
public MyObject(
string id,
{
this.Id = id;
}
}
调试我的&#34; Steps.cs&#34;我的Specflow功能文件使用的类,我注意到&#34; Id&#34;的值正在改变。 他们的预期与#34;鉴定&#34;步骤,我将这些添加到ScenarioContext
[Given("I have use case (.*)")]
{
var _test = _retrieveTest.GetMyObjects(useCase);
ScenarioContext.Current.Add("test", _test);
}
当我从&#34;当&#34;中的ScenarioContext中读出它们时,它们被改变了。步骤
[When("I do something")]
public void WhenIDoSomething()
{
var _test = (MyProject.Entity.Test)ScenarioContext.Current["test"];
}
停止值更改的解决方案是使用LINQ&#34; ToList()&#34;检索对象时调用,如下所示:
private IEnumerable<MyObject> GetMyObjects(
string usecase,
MyProject.Entity.Test test)
{
...
return testData.Objects
.Select(Object => {
var _id = var _id = Guid.NewGuid();
return new MyProject.Entity.MyObject(
_id);
}).ToList();
}
任何人都可以解释为什么有必要调用&#34; .ToList()&#34;在这里,没有它为什么&#34; Id&#34; &#34; ScenarioContext&#34;中的变化在&#34;给予&#34;之间和&#34;当&#34;步骤
答案 0 :(得分:2)
如果没有.ToList(),则返回每次迭代时执行的枚举器。 使用.ToList()可以实现枚举器并具有一个具体的列表。
有关更详细的答案,请参阅IEnumerable vs List - What to Use? How do they work?。