使用yield使其更简单

时间:2011-11-29 13:29:05

标签: c# .net yield

我正在尝试创建一个包含嵌套类的类的列表。我能以某种方式在函数中使用yield来缩短它并使其更可重复吗?

var links = new List<UserLink>();

links.Add(new UserLink
    {
        Name = "A",
        Url = "B.com",
        Something = "C",
        Parameters =
            { 
                new Parameter { Name = "X", Value = "Y" }, 
                new Parameter { Name = "Z", ParameterValue = "0" }
            }
    });

3 个答案:

答案 0 :(得分:3)

我唯一能想到的是使用构造函数,然后它会更短,但可读性更低:

links.Add(new UserLink("A", "B.com", "C", new Parameter("X", "Y" ), new Parameter("Z", "0")));

最后一部分(传递可变数量的Parameter对象)可以通过params关键字实现:

public UserLink(string name, string url, string something = "C", params Parameter[] parameters)
{
    //....
}

答案 1 :(得分:3)

只有在这种情况下才能使用yield的方法是:

public IEnumerable<UserLink> GetLinks()
{
    yield return new UserLink() { Name = "A", ... };
    yield return new UserLink() { Name = "B", ... };
    ...
}

答案 2 :(得分:3)

yield 将用于返回IEnumerables,如下所示:

public IEnumerable<UserLink> UserLinks()
{
    for (int i = 0; i < 10; i++)
    {
        yield return new UserLink
        {
            Name = "A",
            Url = "B.com",
            Something = "C",
            Parameters = 
            { 
                new Parameter { Name = "X", Value = "Y" }, 
                new Parameter { Name = "Z", ParameterValue = i.ToString() }
            }
        };
    }
}

然后你可以像LINQ一样使用它:

UserLinks().Where(userlink => userlink.Name == "A")