2011-11-29 94 views
0

我試圖創建一個嵌套類的類的列表。我可以以某種方式在函數中使用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" } 
      } 
    }); 
+8

你到底削減?它看起來很簡潔。無論如何,'yield'用於返回'IEnumerable '。這似乎並不適用於此。 –

+0

它看起來有點凌亂,如果我想添加像5這些,然後做一些事情與清單 –

+1

你總是可以拿東西作爲構造參數。 –

回答

3

我能想到的是使用構造函數的唯一的事情,那麼這將是更短的,雖然少可讀性:

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) 
{ 
    //.... 
} 
3

,你可以在這方面使用yield唯一可能的方法是:

public IEnumerable<UserLink> GetLinks() 
{ 
    yield return new UserLink() { Name = "A", ... }; 
    yield return new UserLink() { Name = "B", ... }; 
    ... 
} 
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")