编程语言
首页 > 编程语言> > c#-收益回报在每次迭代中返回相同的结果

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