是否可以使用foreach在IEnumerable中创建新对象?

时间:2018-06-19 22:34:33

标签: c# xunit

我要使用XUnit,将字符串列表传递给测试(使用ClassDataMemberData)。有没有办法做这样的事,但有一个清单:

之前:

public static IEnumerable<object[]> GetPersonFromDataGenerator()
{
    yield return new object[]
    {
        new Person {"Tribbiani"},
        new Person {"Gotti"},
        new Person {"Sopranos"},
        new Person {"Corleone"}
    };
}

之后:

public static IEnumerable<object[]> GetPersonFromDataGenerator()
{
    var listOfPersons = GetList();

    yield return new object[]
    {
        foreach(var p in listOfPersons)
        {
             new Person {p}
        } 
    };
}

它必须为IEnumerable<object[]>,这是XUnit ClassDataMemberData固定装置所必需的。

2 个答案:

答案 0 :(得分:1)

为什么不只是

public static IEnumerable<Person> GetPersonFromDataGenerator()
{
    foreach (var p in GetList())
        yield return p;
}

请记住,枚举器可以在方法中多次“屈服回报”!

或者,如果您确实要返回多个对象数组,则代码可能类似于:

public static IEnumerable<object[]> GetPersonFromDataGenerator()
{
    var listOfPersons = GetList();
    yield return listOfPersons.ToArray();
}

ToArray()会为您将列表转换为数组。

答案 1 :(得分:1)

是的

yield return listOfPersons.Select(p=> new Person(p)).ToArray();