используя yield, чтобы сделать его проще - PullRequest
0 голосов
/ 29 ноября 2011

Я пытаюсь создать список класса, в котором есть вложенный класс.Можно ли как-то использовать 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 ]

3 голосов
/ 29 ноября 2011

Единственно возможный способ использования yield в этом контексте:

public IEnumerable<UserLink> GetLinks()
{
    yield return new UserLink() { Name = "A", ... };
    yield return new UserLink() { Name = "B", ... };
    ...
}
3 голосов
/ 29 ноября 2011

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")
3 голосов
/ 29 ноября 2011

Единственное, о чем я могу думать, это использовать конструктор, тогда он будет короче, хотя и менее читабельным:

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)
{
    //....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...