c#-收益回报在每次迭代中返回相同的结果
作者:互联网
问题是要生成搜索参数的组合,以用作自动化测试中的测试用例输入.
public class CombinationInput<T>
{
public string Name { get; set; }
public List<T> PossibleValues { get; set; }
public bool ReadOnly { get; set; }
}
GetCombinations是Combinationsgenerator类中的方法:
private IEnumerable<object[]> _GetCombinations(ArrayList inputs)
{
var returnobjects = new object[inputs.Count];
var element = inputs[0];
var type = element.GetType();
var generictype = type.GenericTypeArguments[0];
var elementvalues = type.GetProperty("PossibleValues").GetValue(element, null) as IEnumerable;
foreach (var val in elementvalues)
{
returnobjects[0] = val;
if (inputs.Count > 1)
{
var objs = _GetCombinations(inputs.GetRange(1, inputs.Count - 1));
foreach (var item in objs)
{
for (int i = 0; i < item.Length; i++)
{
returnobjects[i + 1] = item[i];
}
yield return returnobjects;
}
}
else
{
yield return returnobjects;
}
}
}
内部TestMethod:
[TestMethod]
public void GetCombinationTest()
{
var x = new CombinationInput<Enums.AmountType>();
var y = new CombinationInput<Enums.AreaMeasureType>();
var z = new CombinationInput<Enums.DisplayItemType>();
ArrayList list = new ArrayList();
list.Add(x);
list.Add(y);
list.Add(z);
var combgen = new CombinationGenerator(list);
var combs = combgen.GetCombinations();
}
当我运行代码时,Get Combinations总是返回相同的组合,但是,当我每次调试代码时,每次击中yield return语句时,它都具有正确的组合.
解决方法:
您总是在编辑内容本身时返回相同的对象.您产生的是对数组的引用,并且始终是相同的引用.与其重用同一数组,不如在foreach循环中移动声明和returnobject的创建.
标签:yield-return,c 来源: https://codeday.me/bug/20191122/2058454.html