2017-08-25 42 views
-5
string greeting = "";  
foreach (System.Collections.Generic.ICollection<object> x in greetingRecommendation.Resolution.Values) 
    { 
      foreach (var y in x) 
      { 
       greeting = (string)y; 
      } 
    } 

我需要檢索「greetingRecommendation.Resolution.Values」內部的「Good Morning」值。我按照上面的方法(使用foreach)和它的工作方式執行了此操作。但是,有沒有更好的方法來獲取這個單一的價值。 enter image description here訪問ICollection中的值

+0

你有沒有嘗試之前發佈的搜索回答你的問題?你的問題是微不足道的。 –

+0

我做了一些谷歌,我發現ICollection有ElementAt方法。如果你知道你想訪問的值的索引,那麼你可以調用ElementAt方法,並且這個假設可以更快地返回值,然後使用foreach循環。請注意,這是一種擴展方法。 –

+0

我試過使用ElementAt。但沒有辦法可用 –

回答

1

您可以使用LINQ以更簡單的方式查詢集合。

讓我們以一個例子如下集合:

var objCollection = (ICollection<object>) new List<object> 
{ 
    "Good Morning", 
    "Good Afternoon", 
    "Good Night" 
}; 

現在,我們可以提取的姓氏,名字或一個項目在一個特定的指標有以下:

var firstItem = objCollection.First(); // returns "Good Morning" 
var lastItem = objCollection.Last(); // returns "Good Night" 
var itemAtIndex1 = objCollection.ElementAt(1); // returns "Good Afternoon" 

還有OrDefault所有以前的變種。不同的是,First將拋出一個異常,如果objCollection沒有項目,但FirstOrDefault將簡單地返回default(object)(這是null順便說一句)如果objCollection沒有項目。

對於把一個例子,這是OrDefault變種如何使用:

var firstItem = objCollection.FirstOrDefault(); // returns "Good Morning" 
var lastItem = objCollection.LastOrDefault(); // returns "Good Night" 
var itemAtIndex99 = objCollection.ElementAtOrDefault(99); // returns null, because `objCollection` has only three items and the index 99 doesn't exist on it 

greetingRecommendation.Resolution.Values的情況下,類似如下的可用於檢索集合的第一項:

var greeting = greetingRecommendation.Resolution.Values.FirstOrDefault() as string;

我們假設Values屬性的類型爲ICollection<object>

該行將確保:

  • 如果Values酒店有沒有項目,沒有會拋出異常,並default(object)將返回。
  • Values屬性中的第一項將被安全鑄造爲string,以避免發生問題,如果它包含無法鑄造到string的值。如果該值無法播放,則返回default(string)(即null)。
  • 變量greeting將包含nullstring,其中第一個值爲Values屬性的第一個值。

不要忘記在使用指令中添加一個using System.Linq;以便能夠使用LINQ。

我已經準備了.NET小提琴在下面的鏈接,在行動中看到這樣的LINQ操作: