用yield来简化

本文关键字:yield | 更新日期: 2023-09-27 18:16:10

我试图创建一个类的列表,其中有嵌套类。我能在函数中使用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" }
            }
    });

用yield来简化

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

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

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

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

在这种情况下使用yield的唯一可能的方法是:

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

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")