用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" }
}
});
我唯一能想到的是使用构造函数,然后它会更短,虽然可读性较差:
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")